关闭窗口后退出WPF应用程序

时间:2018-11-21 01:47:44

标签: c# wpf exit

我在类中有一个方法,我调用loginWindow.ShowDialog();会打开一个窗口,但是当您按下Close(右上角的X)时,它不会退出应用程序,而是继续运行{ {1}}。

关闭该窗口后,如何才能完全退出该应用程序?

我尝试使用:

loginWindow.ShowDialog();

尽管这并没有关闭应用程序,这使我感到困惑。当我使用 protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { e.Cancel = true; System.Windows.Application.Current.Shutdown(); base.OnClosing(e); } 时,这不是问题。

2 个答案:

答案 0 :(得分:0)

我不知道您的应用程序如何运行,根据您的示例代码,我有两种解决方案。

解决方案1:-每个窗口都具有DialogResult属性。在OnClosing事件中,分配DialogResult = true;并调用 Shutdown 方法。负责调用的窗口将从ShowDialog()方法的返回值中获取结果

例如:-

  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 ,则第一个窗口将仅检查是否为false时执行以下代码或忽略。

解决方案2:-我们将获得当前应用程序的运行过程,并杀死这是您整个应用程序的整个过程。

    private void SecondWindow_OnClosing(object sender, CancelEventArgs e)
    {
        Process.GetCurrentProcess().Kill();
    }

答案 1 :(得分:0)

您可以在App.Xaml中定义一个shutdown mode

默认选项为OnLastWindowClosed。如果它是OnExplicitShutdown,则应用程序希望您调用Application.Shutdown()。这意味着,如果关闭所有窗口,则该应用程序仍在运行,因为它期望调用Application.Shutdown()。这是一个明确的关闭。

其他两个选项是隐式的,这意味着在关闭最后一个窗口或关闭主窗口时将调用Application.Shutdown()方法。

您可以检查定义的选项吗?