Завершение работы приложения WPF из App.xaml.cs - PullRequest
36 голосов
/ 03 марта 2009

В настоящее время я пишу приложение WPF, которое выполняет обработку аргументов командной строки в App.xaml.cs (что необходимо, потому что событие Startup представляется рекомендуемым способом получения этих аргументов). Исходя из аргументов, я хочу выйти из программы уже в тот момент, что, насколько я знаю, должно быть сделано в WPF с Application.Current.Shutdown() или в этом случае (как я в текущем объекте приложения), вероятно, также просто this.Shutdown().

Единственная проблема состоит в том, что это, кажется, не работает правильно. Я перешел к отладчику и коду после выполнения строки Shutdown(), которая впоследствии приводит к ошибкам в методе, так как я ожидал, что приложение не будет жить так долго. Также все еще загружается главное окно (объявленное в атрибуте StartupUri в XAML).

Я проверил документацию этого метода и ничего не нашел в комментариях, которые говорят мне, что я не должен использовать его во время Application.Startup или Application вообще.

Итак, как правильно выйти из программы в этот момент, т.е. е. обработчик события Startup в объекте Application?

Ответы [ 2 ]

51 голосов
/ 03 марта 2009

Сначала удалите свойство 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);
        }
    }
9 голосов
/ 15 февраля 2013

Если вы удаляете StartupUri из app.xaml для приложения с MainWindow, вам необходимо убедиться, что вы сделали следующий вызов в вашем методе OnStartup, в противном случае приложение не завершит работу, когда ваше MainWindow закроется.

this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;

@ Фрэнк Швитерман, что-то в этом роде может помочь вам с проблемой окна консоли.

...