我正在研究一下如何在.NET中管理未處理的異常,並且我收到了意想不到的結果,我想與大家分享一下,看看您有什麼想法。在.Net 2.0中捕獲未處理的異常。錯誤的事件叫做
第一個看起來很簡單。我寫了這個代碼,做測試,只是拋出創建窗體在同一線程上的異常按鈕:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Throw New Exception()
End Sub
Private Sub UnhandledException(ByVal sender As Object, ByVal e As UnhandledExceptionEventArgs)
MsgBox(String.Format("Exception: {0}. Ending: {1}. AppDomain: {2}", CType(e.ExceptionObject, Exception).Message, e.IsTerminating.ToString(), AppDomain.CurrentDomain.FriendlyName))
End Sub
Private Sub UnhandledThreadException(ByVal sender As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
MsgBox(String.Format("Exception: {0}. AppDomain: {1}", e.Exception.Message(), AppDomain.CurrentDomain.FriendlyName))
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledException
AddHandler Application.ThreadException, AddressOf UnhandledThreadException
End Sub
End Class
當我執行的Visual Studio中的UnhandledException中的代碼按預期的方式調用,但是當我而是從Windows執行應用程序而不是調用UndhanledThreadException。 ¿?¿?¿¿?¿?
有人對這裏會發生什麼有所瞭解嗎?
在此先感謝。
編輯:在閱讀Application.ThreadException documentation看起來像Application.ThreadException異常發生在「Windows窗體線程」(無論它們是什麼,恕我直言,每個應用程序只有一個Windows窗體線程)內發生。所以Application.ThreadException與創建應用程序的表單的線程拋出的異常相關,而其他異常則由AppDomain.CurrentDomain.UnhandledException處理。
調試處理代碼沒有問題,這只是我沒有發現任何有關該事實的文檔。無論如何,只是嘗試了SetUnHandledException並且處理程序不會被調用,因爲執行停止在異常原點並且不能繼續。 – 2010-04-12 13:17:13