Application.UnhandledException 事件

定義

發生于應用程式程式碼可以處理例外狀況時,如從原生層級Windows 執行階段錯誤轉送。 應用程式可以將發生次數標示為事件資料中已處理。

public:
 virtual event UnhandledExceptionEventHandler ^ UnhandledException;
// Register
event_token UnhandledException(UnhandledExceptionEventHandler const& handler) const;

// Revoke with event_token
void UnhandledException(event_token const* cookie) const;

// Revoke with event_revoker
Application::UnhandledException_revoker UnhandledException(auto_revoke_t, UnhandledExceptionEventHandler const& handler) const;
public event UnhandledExceptionEventHandler UnhandledException;
function onUnhandledException(eventArgs) { /* Your code */ }
application.addEventListener("unhandledexception", onUnhandledException);
application.removeEventListener("unhandledexception", onUnhandledException);
- or -
application.onunhandledexception = onUnhandledException;
Public Custom Event UnhandledException As UnhandledExceptionEventHandler 

事件類型

備註

UnhandledException 事件可用來通知應用程式有關 XAML 架構所遇到的例外狀況,或由應用程式程式碼未處理的一般Windows 執行階段所遇到的例外狀況。

例如,如果Windows 執行階段叫用事件處理常式之類的應用程式程式碼,而應用程式程式碼會擲回例外狀況,而且不會攔截它,則例外狀況會傳播回Windows 執行階段。 接著,Windows 執行階段會引發 UnhandledException 事件,以通知應用程式此例外狀況。

在 UnhandledException 中處理例外狀況只是許多技術之一,可用於偵錯和執行時間例外狀況處理和可能的復原。 如需可用於偵錯和錯誤處理之一組完整技術的詳細資訊,請參閱 C# 或 Visual Basic 中的 例外狀況處理

請注意,只有在應用程式程式碼無法再攔截例外狀況時,才會引發此事件。 例如,假設應用程式事件處理常式會呼叫Windows 執行階段 API,進而叫用回呼。 如果內部應用程式程式碼擲回例外狀況,但不會攔截例外狀況,則例外狀況會透過Windows 執行階段傳播回應用程式程式碼的外部層,這會有機會攔截它。 只有在應用程式程式碼無法再透過一般傳播攔截例外狀況時,才會引發 UnhandledException 事件。

您也可以擲回例外狀況,而且永遠不會有應用程式程式碼攔截到的任何機會。 例如,如果 XAML 架構正在執行版面配置並擲回例外狀況,則此例外狀況不會傳播至任何應用程式程式碼。 在此情況下,UnhandledException 事件會引發,而這是第一次收到例外狀況通知的任何應用程式程式碼時。

一般而言,引發 UnhandledException 事件之後,Windows 執行階段會終止應用程式,因為未處理例外狀況。 應用程式程式碼對此有一些控制權:如果 UnhandledException 事件處理常式將事件引數的 Handled 屬性設定為 true,則在大多數情況下,應用程式將不會終止。 不過,基於數個原因,不建議定期這麼做:

  • 一般而言,UnhandledException 事件處理常式沒有足夠的資訊來知道例外狀況安全之後是否繼續。 應用程式程式碼或Windows 執行階段的部分可能處於不一致的狀態,如果應用程式繼續執行其程式碼,可能會導致後續失敗。
  • Windows 執行階段會將某些作業期間發生的例外狀況視為不可復原,因為Windows 執行階段本身會處於不一致的狀態,並遵循這些例外狀況。 針對這類例外狀況,即使 UnhandledException 事件處理常式將 Handled 設定為 true,應用程式仍會終止。
  • 流覽期間發生的錯誤可能會導致沒有任何內容載入的狀態,而且不會向使用者指出應用程式仍在執行中。
  • 如需這些點的詳細資訊,請參閱 C# 或 Visual Basic 中的例外狀況處理

值得注意的限制是 UnhandledException 事件引數不會包含與從應用程式程式碼傳播的原始例外狀況一樣詳細。 可能的話,如果應用程式需要特定例外狀況的特定處理,最好在傳播例外狀況時攔截例外狀況,因為接著會提供更多詳細資料。 UnhandledException 事件引數會透過 Exception 屬性公開 例外 狀況物件。 不過,不保證此例外狀況物件的類型、訊息和堆疊追蹤符合引發的原始例外狀況。 事件引數會公開 Message 屬性。 在大部分情況下,這將會包含最初引發例外狀況的訊息。

您無法在 App.xaml) 的 Application 元素上,在 XAML (中連線 UnhandledException 的處理常式。 您必須在程式碼的 Application 物件上附加 UnhandledException 的處理常式,不論是在建構函式或啟用邏輯中。

對於Windows 8.1應用程式,非同步方法呼叫的例外狀況可以傳播為 UnhandledException 事件。 這包括您自己的非同步方法實作 (啟用處理常式等等) 。

適用於

另請參閱