Завершение работы приложения WPF из App.xaml.cs
-
03-07-2019 - |
Вопрос
В настоящее время я пишу приложение WPF, которое обрабатывает аргументы командной строки в App.xaml.cs (что необходимо, поскольку событие запуска, по-видимому, является рекомендуемым способом получения этих аргументов).Основываясь на аргументах, я хочу выйти из программы уже в этот момент, что, насколько я знаю, следует сделать в WPF с помощью Application.Current.Shutdown()
или в этом случае (как я в текущем объекте приложения), вероятно, просто this.Shutdown()
.
Единственная проблема в том, что это, кажется, работает неправильно.Я выполнил отладчик и код после Shutdown()
строка все равно выполняется, что впоследствии приводит к ошибкам в методе, поскольку я ожидал, что приложение не проживет так долго.Кроме того, главное окно (объявленное в атрибуте StartupUri в XAML) по-прежнему загружается.
Я проверил документацию этого метода и не нашел в примечаниях ничего, что говорило бы мне, что мне не следует использовать его во время Application.Startup
или Application
совсем.
Итак, как правильно выйти из программы в этот момент, т.е.е.тот Startup
обработчик событий в Application
объект?
Решение
Сначала удалите свойство 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);
}
}
Другие советы
Если вы удалите StartupUri из app.xaml для приложения с MainWindow, вам необходимо убедиться, что вы сделали следующий вызов в своем методе OnStartup, иначе приложение не завершится при закрытии вашего MainWindow.
this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
@ Фрэнк Швитерман, что-то в этом роде может помочь вам решить проблему с окном консоли.