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理器中的应用程序的过程。

我想知道:

  1. 他们有什么区别?
  2. 哪种方式将closures我的应用程序更快?
  3. 我应该使用哪种方式closures应用程序?
  4. 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 }