Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序如何正确崩溃?_C#_Wpf_Exception Handling - Fatal编程技术网

C# 应用程序如何正确崩溃?

C# 应用程序如何正确崩溃?,c#,wpf,exception-handling,C#,Wpf,Exception Handling,我在项目的App类中有一个未处理异常的处理程序。它用于设置发送反馈按钮 App.xaml.cs private void Application_DispatcherUnhandledException( object sender, DispatcherUnhandledExceptionEventArgs e) { try { // Try to collect feedback with dialog. new Application

我在项目的App类中有一个未处理异常的处理程序。它用于设置发送反馈按钮

App.xaml.cs

private void Application_DispatcherUnhandledException(
    object sender, DispatcherUnhandledExceptionEventArgs e)
{
    try
    {
        // Try to collect feedback with dialog.
        new ApplicationExceptionDialog(e).ShowDialog();
    }
    catch
    {
        MessageBox.Show(
            "A problem has occurred with the program:\r\n\r\n" +
            e.Exception.Message + "\r\n\r\n" +
            "The application will now exit.",
            "Application Error",
            MessageBoxButton.OK,
            MessageBoxImage.Error);
    }
    finally
    {
        Application.Current.Shutdown(1); // ← Is this okay?
    }
}
问题

除了处理各种异常之外,当所有其他异常都失败时,在未处理的异常之后退出应用程序的正确方法是什么

编辑


此问题特定于WPF应用程序。我在应用程序中还有非托管代码,以使登录更安全。我没有遇到任何问题,但我需要确保如果出现问题,使用的退出过程是最佳选择。

要退出控制台应用程序,请尝试

Environment.Exit(0);
对于windows应用程序,请尝试:

Application.Exit(0);

要退出控制台应用程序,请尝试

Environment.Exit(0);
对于windows应用程序,请尝试:

Application.Exit(0);
关闭WPF应用程序的正确方法是使用。这将指示所有消息泵停止,并允许执行清理代码(如关闭事件)。它还使所有非后台线程保持运行。在您的情况下,这可能不是您想要的

由于存在未处理的异常,系统处于未知状态——您不能假设关闭事件将正确运行,任何正在运行的线程都将正常终止。因此,我建议使用,这将关闭进程,并关闭所有正在运行的线程。但它最终将运行
块和类终结器,它们通常用于释放获取的资源

如果您认为在当前状态下运行终结器可能会导致现有数据/资源损坏,或对系统造成任何其他类型的损坏,则应改用。这将指示操作系统立即终止进程,而不运行任何终结器。您可能希望在
环境中使用此应用程序。根据应用程序的用途退出

关闭WPF应用程序的正确方法是使用。这将指示所有消息泵停止,并允许执行清理代码(如关闭事件)。它还使所有非后台线程保持运行。在您的情况下,这可能不是您想要的

由于存在未处理的异常,系统处于未知状态——您不能假设关闭事件将正确运行,任何正在运行的线程都将正常终止。因此,我建议使用,这将关闭进程,并关闭所有正在运行的线程。但它最终将运行
块和类终结器,它们通常用于释放获取的资源


如果您认为在当前状态下运行终结器可能会导致现有数据/资源损坏,或对系统造成任何其他类型的损坏,则应改用。这将指示操作系统立即终止进程,而不运行任何终结器。您可能希望在
环境中使用此应用程序。根据应用程序的用途退出

我正在运行WPF应用程序。我熟悉在应用程序正确运行时关闭应用程序的给定方法,但不熟悉异常未处理时关闭应用程序的方法。我将对问题进行编辑,这样就不会再有误解了。谢谢叶甫盖尼!我正在运行一个WPF应用程序。我熟悉在应用程序正确运行时关闭应用程序的给定方法,但不熟悉异常未处理时关闭应用程序的方法。我将对问题进行编辑,这样就不会再有误解了。谢谢叶甫盖尼!可能重复:@RahulTripathi:这个问题是关于弹出的消息框,接受的答案使用
Process.Kill()
。你同意这个答案吗?可能重复:@RahulTripathi:这个问题是关于弹出的消息框,而接受的答案使用
Process.Kill()
。你同意这个答案吗?