Answers:
要退出您的应用程序,您可以致电
System.Windows.Application.Current.Shutdown();
如该Application.Shutdown
方法的文档中所述,您还可以通过指定ShutdownMode来修改应用程序的关闭行为:
在以下情况下,Windows Presentation Foundation(WPF)隐式调用Shutdown:
- 当ShutdownMode设置为OnLastWindowClose时。
- 当ShutdownMode设置为OnMainWindowClose时。
- 当用户结束会话并且SessionEnding事件未处理或已处理而没有取消时。
另请注意,Application.Current.Shutdown();
只能从创建Application
对象的线程(通常是主线程)中调用。
Application.Current.Shutdown();
您的联系将不会立即返回。您也需要为此打电话return;
。
Application
不是静态类。拥有Application.Current
静态成员并不意味着它是静态的。相反,它是可以派生的普通类。
Environment.Exit()
需要至少一个参数,即退出代码。使用Environment.Exit(0)
,如果你不关心的退出代码。
Application.Current.Shutdown();
Application.Current.Shutdown();
我的Closing
事件是所谓的,我只是想关闭我立即应用。所以Environment.Exit(0);
是更好的选择。
正如wuminqi所说,它Application.Current.Shutdown();
是不可逆的,我相信它通常用于强制应用程序在诸如用户注销或关闭Windows时关闭。
而是this.close()
在主窗口中调用。这与在窗口上按Alt+ F4或关闭[x]按钮相同。Application.Current.Shutdown();
只要未取消关闭操作,这将导致所有其他拥有的窗口关闭并最终调用。请参阅有关关闭窗口的MSDN文档。
另外,由于this.close()
可以取消,因此可以在关闭事件处理程序中放入保存更改确认对话框。只需为其创建一个事件处理程序<Window Closing="...">
并e.Cancel
相应地进行更改。(有关如何执行此操作的更多详细信息,请参阅MSDN文档。)
根据需要使用以下任何一种:
1。
App.Current.Shutdown();
OR
Application.Current.Shutdown();
2。
App.Current.MainWindow.Close();
OR
Application.Current.MainWindow.Close();
上述所有方法将调用closing event
的Window
类和执行可能在某一时刻停止(原因通常应用把对话像“你确定吗?”或者“ 你想在关闭之前保存数据? ”,之前完全关闭的窗口)
3.但是,如果您想立即终止应用程序而没有任何警告。在下面使用
Environment.Exit(0);
这是我的工作方式:
// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if (response == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
Application.Current.Shutdown();
}
}
我只Application.Current.ShutDown()
从主应用程序窗口调用,所有其他窗口都使用this.Close()
。在我的主窗口中,Window_Closing(...)
处理右上角的x
按钮。如果任何一种方法要求Window_Closing(...)
关闭窗口,则在用户确认的情况下获取事件以将其关闭。
我实际上Application.Current.Shutdown()
在主窗口中使用的原因是,我注意到,如果发生了设计错误并且没有在应用程序中声明我的一个窗口的父窗口,则该窗口是在未事先显示的情况下打开的到最后一个活动窗口关闭时,我剩下一个在后台运行的隐藏窗口。该应用程序将不会关闭。防止完全内存泄漏的唯一方法是让我进入任务管理器以关闭应用程序。 Application.Current.Shutdown()
保护我免受意外设计缺陷的侵害。
那是根据我的个人经验。最后,使用最适合您的方案的方法。这只是另一条信息。
另一种方法是:
System.Diagnostics.Process.GetCurrentProcess().Kill();
这将强制终止您的应用程序。即使在多线程应用程序中,它也始终有效。
注意:请注意不要在另一个线程中丢失未保存的数据。
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();
为了我
Application.Current.Shutdown();
没用
据我了解,Application.Current.Shutdown()
也有其缺点。
如果要显示一个确认窗口让用户确认是否退出,Application.Current.Shutdown()
则是不可逆的。
Application.Current.Shutdown()
。
总结一下,有几种方法可以做到这一点。
1)终止进程,从而跳过最终确定,错误处理等:
Process.GetCurrentProcess().Kill();
2)关闭当前应用程序,这可能是正确的方法,因为它会调用退出事件:
Application.Current.Shutdown();
要么
this.Shutdown();
(在应用类的实例中抓紧时)
3)关闭目前的应用程式(必须先关闭/完成所有表格):
this.Close();
(在应用类的实例中抓紧时)
4)退出环境,终止该应用程序:
Environment.Exit(0);
Caliburn微风味
public class CloseAppResult : CancelResult
{
public override void Execute(CoroutineExecutionContext context)
{
Application.Current.Shutdown();
base.Execute(context);
}
}
public class CancelResult : Result
{
public override void Execute(CoroutineExecutionContext context)
{
OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
}
}
如果要从另一个未创建应用程序对象的线程退出,请使用:
System.Windows.Application.Current.Dispatcher.InvokeShutdown();
从xaml代码中,您可以调用预定义的SystemCommand:
Command="SystemCommands.MinimizeWindowCommand"
我认为这应该是首选的方式...