Kill(),Environment.Exit(0)或this.Shutdown()
我的GUI基于桌面的WPF 4.0(C#.Net 4.0)程序与SQL Server数据库一起使用。 每次运行我的应用程序时,它都会通过ADO.NET Entity Framework创build一个到SQL Server的连接,如果SQL Server不可达,则会引发exception并显示带有通知的MessageBox。
现在我想在用户阅读这个消息后,应用程序将closures。 我发现了三种方法来做到这一点:
Process.GetCurrentProcess().Kill();
要么
this.Shutdown(); // Application.Current.Shutdown()
要么
System.Environment.Exit(0);
所有这些工作正常,做我所需要的 – closures应用程序,并杀死Windows任务pipe理器中的应用程序的过程。
我想知道:
- 他们有什么区别?
- 哪种方式将closures我的应用程序更快?
- 我应该使用哪种方式closures应用程序?
- 是
Application.Current.Shutdown()
和this.Shutdown()
以同样的方式closures应用程序?
或者,也许有另一种更合适的方式来closuresWPF GUI应用程序?
Application.Exit()
不适用于我,因为我得到的错误:
事件“
System.Windows.Application.Exit
”只能出现在+ =或 – =的左侧
谢谢。
Application.Current.Shutdown()
是closures应用程序的正确方法。 一般是因为你可以处理更多的退出事件
Process.GetCurrentProcess().Kill()
当你想杀死应用程序时,应该使用Process.GetCurrentProcess().Kill()
。 更多
AD1。 这些方法的性质完全不同。 关机过程可以暂停以结束一些操作,强制closures应用程序。
AD2。 可能Kill()
将是最快的方式,但这是像内核恐慌。
AD3。 关机,因为它触发了closures事件
AD4。 这取决于this
是什么。
使用Application.Current.Shutdown();
在App.xaml中添加ShutdownMode =“OnMainWindowClose”
private void ExitMenu_Click(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); }
@DamianLeszczyński – Vash的回答几乎涵盖了你提出的四个具体问题。 对于Application.Exit()
的最终问题,这是一个你可以订阅的事件,而不是你可以调用的方法。 它应该像这样使用:
Application.Current.Exit += CurrentOnExit; //this.Exit += CurrentOnExit; would also work if you're in your main application class ... private void CurrentOnExit(object sender, ExitEventArgs exitEventArgs) { //do some final stuff here before the app shuts down }