Выход из приложения WPF после закрытия окна - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть метод в классе, где я вызываю loginWindow.ShowDialog();, который вызывает окно, однако, когда вы нажимаете Закрыть (X в правом верхнем углу), он не выходит из приложения, а продолжает работать, если ниже loginWindow.ShowDialog();в этом методе.

Как я могу полностью выйти из приложения, если это окно закрыто?

Я пытался использовать:

    protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
    {
        e.Cancel = true;
        System.Windows.Application.Current.Shutdown();
        base.OnClosing(e);
    }

Хотя это не закрывало приложение, что меня смущает.Когда я использовал loginWindow.Show();, это не было проблемой.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Существует режим выключения , который вы можете определить в App.Xaml

По умолчанию используется OnLastWindowClosed.Если это OnExplicitShutdown, то приложение хочет, чтобы вы вызывали Application.Shutdown ().Это означает, что если вы закроете все окна, приложение все еще работает, поскольку ожидает вызова Application.Shutdown ().Это явное завершение работы.

Неявные два других параметра означают, что метод Application.Shutdown () будет вызываться при закрытии последнего окна или при закрытии главного окна.

Можете ли выпроверить, какой вариант вы определили?

0 голосов
/ 21 ноября 2018

Я не знаю, как работает ваше приложение, на основе вашего примера кода у меня есть два решения.

Решение 1: - Каждое окно имеет свойство DialogResult.Внутри события OnClosing назначьте DialogResult = true; и вызовите метод Shutdown .Окна, отвечающие за вызов, получат результат из возвращаемого значения ShowDialog() method

Например: -

  private void SecondWindow_OnClosing(object sender, CancelEventArgs e)
    {
        DialogResult = true;
        System.Windows.Application.Current.Shutdown();
    }

Событие ниже, от первого экрана, вызывающее второеОкно.

private void Button_Click(object sender, RoutedEventArgs e)
    {
        SecondWindow secondWindow = new SecondWindow();
        var dialogResult = secondWindow.ShowDialog();
        if (dialogResult.HasValue && dialogResult.Value == false)
        {
            // any code of yours which must not be executed after the second
            // window has closed the process
       }
    }

После того, как DialogResult назначено true , первое окно будет проверять, только если оно ложно, выполнить приведенный ниже код или игнорировать.

Решение 2: - Мы получим текущий процесс запуска приложения и уничтожим весь процесс, который является целым приложением.

    private void SecondWindow_OnClosing(object sender, CancelEventArgs e)
    {
        Process.GetCurrentProcess().Kill();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...