2012-05-15 71 views
3

如果我的應用程序以我無法處理的異常結束,我希望它向用戶顯示錯誤消息並退出。問題在於用戶會看到一個異常對話框,其中包含Details,Continue和Quit選項,如果用戶單擊Continue,則應用程序將保持在我不想要的「某些」狀態。應用程序不會死於未處理的異常?

複製這種與我剛剛創建了一個Windows窗體應用程序,添加一個按鈕的代碼量最少,而且按鈕的點擊代碼只是寫道:

throw new ApplicationException("I must crash now!!!"); 

當開始從調試編譯EXE文件夾,Release文件夾或從Release文件夾中啓動exe文件(在pdb文件導致問題的情況下),然後單擊按鈕我顯示Details/Continue/Quit對話框,如果我說繼續應用程序保持生命我如何防止繼續選項出現?

我在我的電腦上(Vista,Visual Studio 2008,Visual Studio 2010,使用VS2010創建測試應用程序)以及用戶計算機(Windows 7)上都有這種行爲。

回答

4

它是Windows窗體捕獲異常,並顯示你想避免對話框。您可以配置Windows窗體不使用Application.SetUnhandledExceptionMode方法執行此操作。

+0

如果我將它設置爲UnhandledExceptionMode.ThrowException,那麼看起來像Windows窗體是「處理未處理的異常」。繼續作爲.Net中未處理異常的默認選項的基本原理是什麼? – user755327

+0

@ user755327:Windows窗體的設計人員可能更好地回答有關基本原理的問題,但帶有「繼續」和「退出」按鈕的對話框始終在Windows窗體中。這是一個Windows窗體特定功能,而不是.NET功能。 –

3

您需要爲AppDomain.UnhandledException事件編寫事件處理程序,在該事件中向用戶顯示更好的錯誤消息。

http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx

請記住,雖然,異常可能意味着系統處於一個不確定的狀態,所以,即使你的錯誤對話框,可能有麻煩展示......你需要能夠優雅地崩潰。

在你的應用程序的出發點:

static void Main() { 
    AppDomain currentDomain = AppDomain.CurrentDomain; 
    currentDomain.UnhandledException += errorHandler; 
    // Then start your app! 
} 

static void errorHandler(object sender, UnhandledExceptionEventArgs args) { 
    // Show the user some error, but be prepared for disaster... 
    // Examine the args.ExceptionObject (which is an Exception) 
} 
+0

我真的不在乎顯示更好的錯誤消息,我只是想100%確定應用程序將會死亡。我的問題是可用的「繼續」選項。您的鏈接指出:「它允許應用程序在系統默認處理程序向用戶報告異常並終止應用程序之前記錄有關異常的信息。」但它不會終止應用程序。 – user755327

+0

我認爲問題在於Windows窗體處理異常,在這種情況下,將不會調用「UnhandledException」處理程序。 –

相關問題