Подтвердить что ты не робот

Выключение приложения WPF из App.xaml.cs

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

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

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

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

4b9b3361

Ответ 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, что-то в этом роде может помочь вам в проблеме с консольным окном.