共用方式為


管理的執行緒中的例外

Common Language Runtime 允許線程中大部分未處理的例外狀況自然繼續。 在大部分情況下,這表示未處理的例外狀況會導致應用程序終止。 不過,Common Language Runtime 會針對用於控制程式流程的特定未處理的例外狀況提供後置:

  • 由於呼叫了ThreadAbortException,所以在線程中拋出Abort。 這隻適用於 .NET Framework 應用程式。

  • AppDomainUnloadedException 在執行緒中被擲回,因為執行緒所在的應用程式域正在被卸載。

  • 公用語言執行時或宿主進程通過拋出內部例外狀況來終止執行緒。

如果 Common Language Runtime 所建立的線程中未處理上述任何例外狀況,則例外狀況會終止線程,但 Common Language Runtime 不允許例外狀況進一步繼續。

如果這些例外狀況在主執行緒中未處理,或在從非受控程式碼進入執行階段的執行緒中未處理,這些例外狀況會正常運行,導致應用程式終止。

備註

執行階段可能在任何「管理代碼」有機會安裝例外處理器之前,引發未被處理的例外。 即使 Managed 程式代碼沒有機會處理這類例外狀況,但允許例外狀況自然繼續。

在開發期間公開線程問題

當允許線程以無訊息方式失敗時,若未終止應用程式,嚴重的程式設計問題可能會無法偵測到。 對於長時間執行的服務和其他應用程式而言,這是一個特別的問題。 當線程失敗時,程式狀態會逐漸損毀。 應用程式效能可能會降低,或應用程式可能變得沒有回應。

允許線程中未處理的例外狀況自然繼續,直到作系統終止程序為止,會在開發和測試期間公開這類問題。 程式終止支援偵錯的錯誤報告。

主機覆寫

非受控主機可以使用裝載 API 中的 ICLRPolicyManager 介面來覆寫 Common Language Runtime 的預設未處理例外狀況原則。 ICLRPolicyManager::SetUnhandledExceptionPolicy 函式可用來設定未處理的例外狀況原則。

另請參閱