我在类中有一个方法,我调用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);
}
时,这不是问题。
答案 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()方法。
您可以检查定义的选项吗?