Вопрос

В настоящее время я пишу приложение 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;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top