2010-02-15 99 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

相關問題