未处理异常后终止应用程序

4

我在一个WPF应用程序中遇到了问题。我写了这段代码:

public partial class App : Application
{
    public App()
    {
        AppDomain.CurrentDomain.UnhandledException += new 
            UnhandledExceptionEventHandler(MyHandler);
    }

    void MyHandler(object sender, UnhandledExceptionEventArgs e)
    {
        Exception exception = e.ExceptionObject as Exception;
        MessageBox.Show(exception.Message, "ERROR",
                        MessageBoxButton.OK, MessageBoxImage.Error);
    }

    ...
}

但当未处理的异常发生时,屏幕上会出现很多消息框(异常发生在定时例程中),关闭其中一个后,Windows会提示存在未处理的异常。如何避免多个消息框?如何避免未处理异常的消息?如何在异常后终止应用程序?显然,我想使用我的MessageBox显示一条消息(但只有一条),然后终止应用程序,不再出现其他消息。在与此相关的先前的问题中,Kyle Rozendo告诉我要使用DispatcherUnhandledException。这是必需的吗?还是我编写的代码已经足够了?谢谢。
2个回答

7
您可以使用 Application.Exit() 或者 System.Environment.Exit(exitCode) 来在显示错误对话框后立即关闭应用程序。

4
小注:如果异常发生在应用程序运行之前,Application.Exit()将无法起作用。 - jaekie

3
你可以通过将静态布尔变量firstTime初始化为true并在异常处理程序中使用以下代码来避免多个消息框:
void MyHandler(object sender, UnhandledExceptionEventArgs e) 
{ 
   if (firstTime){
        Exception exception = e.ExceptionObject as Exception; 
        MessageBox.Show(exception.Message, "ERROR", 
                        MessageBoxButton.OK, MessageBoxImage.Error); 
        firstTime = false;
   }else{
        // 现在杀死进程....
   }
} 
要终止进程,请在MyHandler内执行以下操作:
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.Kill();

DispatcherUnhandledException呢?它也是必要的吗? - Maurizio Reginelli
DispatcherUnhandledException 不是必需的。你试过这段代码了吗?因为这段代码会关闭应用程序... - t0mm13b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接