2010-02-15 57 views
3

我在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?
如何避免未处理异常的消息?
如何在异常后终止应用程序?
正如您可以轻易推测的那样,我想用我的MessageBox显示一条消息(但只有一条消息),然后在没有任何其他消息的情况下终止应用程序。

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

谢谢。

回答

3

您可以通过初始化静态布尔firstTimetrue避免多次提示消息框,并使用代码中的异常处理程序中:

 
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(); 
+0

DispatcherUnhandledException怎么样?它也有必要吗? – 2010-02-15 14:10:51

+0

DispatcherUnhandledException不是必需的。你有没有尝试过的代码,看看是否工作..因为代码将关闭应用程序... – t0mm13b 2010-02-15 15:42:00

6

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

+4

小注意事项.. Application.Exit()将无法正常工作,如果异常发生在Application.Run – jaekie 2010-09-23 16:28:06

相关问题