当用户从文件菜单中单击退出菜单项时,应该如何退出应用程序?
我试过:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
还有很多其他的。没有什么工作。
当用户从文件菜单中单击退出菜单项时,应该如何退出应用程序?
我试过:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
还有很多其他的。没有什么工作。
当前回答
private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
System.Windows.Application.Current.MainWindow.Close();
}
//Override the onClose method in the Application Main window
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Do you really want to close", "",
MessageBoxButton.OKCancel);
if (result == MessageBoxResult.Cancel)
{
e.Cancel = true;
}
base.OnClosing(e);
}
其他回答
总结一下,有几种方法可以做到这一点。
1)终止进程,跳过结束、错误处理等:
Process.GetCurrentProcess().Kill();
2)关闭当前应用程序,这可能是正确的方式,因为它调用退出事件:
Application.Current.Shutdown();
or
this.Shutdown();
(当在app类的实例中调用时)
3)关闭当前app(所有表单必须提前关闭/完成):
this.Close();
(当在app类的实例中调用时)
4)退出环境,终止应用程序:
Environment.Exit(0);
此外,你可能想在这里阅读退出状态
private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
System.Windows.Application.Current.MainWindow.Close();
}
//Override the onClose method in the Application Main window
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Do you really want to close", "",
MessageBoxButton.OKCancel);
if (result == MessageBoxResult.Cancel)
{
e.Cancel = true;
}
base.OnClosing(e);
}
App.Current.Shutdown (); 把它写在你需要的地方。
正如wuminqi所说,Application.Current.Shutdown();是不可逆的,我相信它通常用于强制应用程序关闭时,如当用户注销或关闭Windows。
相反,在主窗口中调用this.close()。这与在窗口上按Alt + F4或关闭[x]按钮相同。这将导致所有其他拥有的窗口关闭,并最终调用Application.Current.Shutdown();只要近距离行动没有取消。请参阅MSDN文档关闭窗口。
此外,由于this.close()是可取消的,您可以在关闭事件处理程序中放入一个保存更改确认对话框。简单地为<Window Closing="…>和更改e。(有关如何做到这一点的详细信息,请参阅MSDN文档。)
要退出应用程序,您可以调用
System.Windows.Application.Current.Shutdown();
如应用程序文档中所述。你也可以通过指定ShutdownMode来修改应用程序的关机行为:
在以下情况下,Windows Presentation Foundation (WPF)会隐式调用Shutdown: 当ShutdownMode设置为OnLastWindowClose时。 当关机模式设置为OnMainWindowClose时。 当用户结束会话,而SessionEnding事件未被处理或在未取消的情况下被处理时。
请注意Application.Current.Shutdown();只能从创建Application对象的线程调用,即通常是主线程。