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

时间:2010-02-15 13:45:32

标签: c# wpf exception-handling

我在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);
    }

    ...
}

但是当发生未处理的异常时,屏幕上会出现很多MessageBox(例外情况发生在定时例程中),关闭其中一个后,Windows会发出一个未处理的异常信号。

如何避免多个MessageBox? 如何避免未处理异常的消息?
如何在例外后终止申请?
您可以轻松地假设,我想用MessageBox显示一条消息(但只有一条),然后在没有任何其他消息的情况下终止应用程序。

在与此参数相关的previous question中,Kyle Rozendo告诉我使用DispatcherUnhandledException。是否有必要或我编写的代码是否足够?

谢谢。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分: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{
        // Now kill the process....
   }
} 

要终止此过程,请在MyHandler

中执行此操作
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
proc.Kill();