50

我的基于 GUI 桌面的 WPF 4.0 (C# .Net 4.0) 程序适用于 SQL Server 数据库。每次运行我的应用程序时,它都会通过 ADO.NET Entity Framework 创建与 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”只能出现在 += 或 -= 的左侧

谢谢。

4

4 回答 4

69

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

Process.GetCurrentProcess().Kill()当你想杀死应用程序时应该使用。更多的

广告1。这些方法的性质完全不同。可以暂停关闭进程以结束某些操作,kill 强制关闭应用程序。

广告2。可能Kill()是最快的方法,但这有点像内核恐慌。

广告3。关闭,因为它触发了关闭事件

广告4。这取决于是什么this

于 2010-10-07T11:14:46.933 回答
2

使用 Application.Current.Shutdown();

App.xaml中添加ShutdownMode="OnMainWindowClose"

于 2015-12-13T17:22:14.417 回答
1

@Damian Leszczyń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
}
于 2016-10-18T14:25:18.160 回答
1
private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }
于 2016-05-23T16:07:23.577 回答