2010-07-09 31 views

回答

11

Application.DispatcherUnhandledException將處理在WPF應用程序中的主UI線程上拋出的異常。 AppDomain.UnhandledException將處理在任何線程上拋出的異常,並且永遠不會被捕獲。這包括您手動創建的線程或控制檯應用程序中的主線程。 WPF正在捕獲UI線程中的異常,因此您不會在AppDomain.UnhandledException中看到這些異常。

另請注意,未處理的異常通常會終止運行時,因此在AppDomain.UnhandledException被引發後,您的程序將立即退出。相反,Application.DispatcherUnhandledException正在捕捉異常,並會讓您的程序繼續。

+7

實際上,當Application.DispatcherUnhandledException未使用時,這些異常將顯示在AppDomain.UnhandledException中,並且應用程序將立即退出。 – stijn 2011-12-17 12:39:44

+0

如果捕獲並處理異常,應用程序將不存在。回答和評論都暗示應用程序退出哪種方式是錯誤的。 – vikp 2015-01-09 16:41:15

2

http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

說:

「DispatcherUnhandledException是因爲這是由主UI線程上運行的代碼未處理每個異常的應用提高。」

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

說:

「這一事件可以在任何應用領域進行處理。然而,該事件並不一定在發生異常的應用領域提出的。」

因此,DispatcherUnhandledException用於UI線程異常,並且AppDomain.UnhandledException用於其他所有內容。

希望有幫助!

8

DispatcherUnhandledException僅由UI線程引發,且僅在運行事件時引發異常。有些傳統可以專門處理這類異常,Windows Forms也有Application.ThreadException(名字不好,與線程無關)。

原因是有一個小的機會來處理異常,並保持程序活着,因爲UI事件處理程序並不總是突然改變程序的狀態。這需要大量的一廂情願的幫助。 Windows窗體將此視爲極端,它顯示一個具有繼續按鈕的ThreadExceptionDialog,允許用戶忽略該異常。 WPF不這樣做,你必須自己寫一個類似的對話框。這就是事件發生的原因。

DispatcherUnhandledException的默認操作是不捕獲異常。所以你可以忽略它,AppDomain.UnhandledException接下來會觸發。

相關問題