关闭WPF GUI应用程序的正确方法:getCurrentProcess()。kill(),emoventir.exit(0)或this.shutdown()

StackOverflow https://stackoverflow.com/questions/3880836

我的GUI台式机WPF 4.0(C#.NET 4.0)程序可与SQL Server数据库一起使用。每次运行应用程序时,都会通过ADO.NET实体框架创建与SQL Server的连接,如果无法到达SQL Server,则会引发异常并显示 MessageBox 通知。

现在,我希望用户阅读此消息应用程序后将关闭。我找到了三种方法:

Process.GetCurrentProcess().Kill();

或者

this.Shutdown(); // Application.Current.Shutdown()

或者

System.Environment.Exit(0);

所有这些都可以正常工作并做我需要的事情 - 关闭应用程序并在Windows任务管理器中杀死应用程序的流程。

我想知道:

  1. 它们有什么区别?
  2. 哪种方式将更快地关闭我的应用程序?
  3. 我应该使用哪种方法来使用?
  4. Application.Current.Shutdown()this.Shutdown() 关闭申请的方式相同?

也许还有另一种更合适的方法可以关闭WPF GUI应用程序?

Application.Exit() 当我收到错误时,对我不起作用:

事件 'System.Windows.Application.Exit'只能出现在 +=或 - =的左侧

谢谢。

有帮助吗?

解决方案

Application.Current.Shutdown() 是关闭应用程序的正确方法。通常是因为开火您可以处理的退出事件 更多的

Process.GetCurrentProcess().Kill() 要杀死应用程序时,应使用。 更多的

AD1。这些方法的性质是完全不同的。可以暂停关闭过程以结束某些操作,杀死武力关闭。

AD2。大概 Kill() 将是最快的方法,但这就像内核恐慌。

AD3。关闭,因为它发射了关闭事件

AD4。那取决于什么 this 是。

其他提示

采用 application.current.shutdown();

添加 ShutDownMode =“ OnMainWindowClose”app.xaml

private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }

@DamianLeszczyński-Vash的答案几乎涵盖了您提出的4个特定问题。对于您的最后一个问题 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
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top