Выключение приложения WPF из App.xaml.cs
В настоящее время я пишу приложение WPF, которое обрабатывает аргументы командной строки в App.xaml.cs(что необходимо, поскольку событие Startup, по-видимому, является рекомендуемым способом получения этих аргументов). Основываясь на аргументах, я хочу выйти из программы в тот момент, который, насколько мне известно, должен быть выполнен в WPF с помощью Application.Current.Shutdown()
или в этом случае (как я есть в текущем объекте приложения), вероятно, также просто this.Shutdown()
.
Единственная проблема заключается в том, что это, похоже, не работает правильно. Я прошел через отладчик и код после того, как строка Shutdown()
все еще выполняется, что приводит к ошибкам впоследствии в методе, так как я ожидал, что приложение не будет так долго жить. Также загружается главное окно (объявленное в атрибуте StartupUri в XAML).
Я проверил документацию по этому методу и ничего не нашел в замечаниях, которые говорят мне, что я не должен использовать его во время Application.Startup
или Application
вообще.
Итак, каков правильный способ выхода из программы в этот момент, т.е. е. обработчик события Startup
в объекте Application
?
Ответы
Ответ 1
Сначала удалите свойство StartupUri из App.xaml, а затем используйте следующее:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
bool doShutDown = ...;
if (doShutDown)
{
Shutdown(1);
return;
}
else
{
this.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
}
}
Ответ 2
Если вы удалите StartupUri из app.xaml для приложения с MainWindow, вам необходимо убедиться, что вы выполняете следующий вызов в методе OnStartup, иначе приложение не завершится, когда ваш MainWindow закроется.
this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
@Frank Schwieterman, что-то в этом роде может помочь вам в проблеме с консольным окном.