System.AppDoメイン。UnhandledException イベント

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このイベントは UnhandledException 、キャッチされていない例外の通知を提供します。 これにより、システムの既定のハンドラーがユーザーに例外を報告し、アプリケーションを終了する前に、アプリケーションで例外に関する情報をログに記録できます。 アプリケーションの状態に関する十分な情報が得られる場合は、後で回復するためにプログラム データを保存するなど、他のアクションが実行される可能性があります。 例外が処理されないとプログラム データが破損する可能性があるため、注意が必要です。

このイベントは、任意のアプリケーションで処理できますメイン。 ただし、例外が発生したアプリケーションでイベントが発生メイン必ずしも発生するとは限りません。 例外は、該当する例外ハンドラーが見つからずにスレッドのスタック全体がアンウンドされた場合にのみ処理されないため、イベントを発生できる最初の場所は、スレッドが発生したアプリケーション内メインです。

イベントが既定のUnhandledExceptionアプリケーションで処理される場合メイン、スレッドが開始されたメインアプリケーションが何を行っても、スレッド内のハンドルされない例外に対して発生します。 アプリケーションで開始されたスレッドがメインイベント ハンドラーUnhandledExceptionを持つ場合は、そのアプリケーションでイベントが発生しますメイン。 そのアプリケーションがメインが既定のアプリケーションの実行ではない場合メイン、既定のアプリケーションの doメイン にもイベント ハンドラーが存在する場合、イベントは両方のアプリケーション doメイン で発生します。

たとえば、アプリケーション doメイン "AD1" でスレッドが開始され、アプリケーション doメイン "AD2" 内のメソッドが呼び出され、そこからアプリケーション doメイン "AD3" 内のメソッドが呼び出され、そこで例外がスローされるとします。 イベントを発生できる最初のUnhandledExceptionアプリケーションはメイン "AD1" です。 そのアプリケーションがメイン既定のアプリケーションではない場合はメイン既定のアプリケーションでイベントを発生することもできますメイン。

Note

共通言語ランタイムは、イベントのイベント ハンドラーの実行中にスレッドの中止を UnhandledException 中断します。

イベント ハンドラーに適切なフラグを ReliabilityContractAttribute 持つ属性がある場合、イベント ハンドラーは制約付き実行領域として扱われます。

.NET Framework 4 以降では、イベント ハンドラーがセキュリティクリティカルで属性を持たない限り、スタック オーバーフローやアクセス違反など、プロセスの状態を破損する例外に対してこのイベントは HandleProcessCorruptedStateExceptionsAttribute 発生しません。

このイベントのイベント ハンドラーを登録するには、必要なアクセス許可を持っているか、a SecurityException がスローされる必要があります。

イベントの処理の詳細については、「処理とイベントの発生」を参照してください。

ハンドルされない例外のその他のイベント

特定のアプリケーション モデルでは、UnhandledExceptionメイン アプリケーション スレッドで未処理の例外が発生した場合、他のイベントによってイベントが割り込まれる可能性があります。

Windows フォームを使用するアプリケーションでは、メイン アプリケーション スレッドでハンドルされない例外が発生Application.ThreadExceptionします。 このイベントが処理される場合、既定の動作では、ハンドルされない例外はアプリケーションを終了しませんが、アプリケーションは不明な状態のままです。 その場合、 UnhandledException イベントは発生しません。 この動作は、アプリケーション構成ファイルを使用するか、メソッドをApplication.SetUnhandledExceptionMode使用して、イベント ハンドラーがフックされる前にモードをUnhandledExceptionMode.ThrowExceptionThreadException変更することで変更できます。 これは、メイン アプリケーション スレッドにのみ適用されます。 イベントは UnhandledException 、他のスレッドでスローされた未処理の例外に対して発生します。

Visual Basic アプリケーション フレームワークは、メイン アプリケーション スレッド内のハンドルされない例外に対して別のイベント (イベント) をWindowsFormsApplicationBase.UnhandledException提供します。 このイベントには、使用されるイベント引数オブジェクトと同じ名前のイベント引数オブジェクト AppDomain.UnhandledExceptionがありますが、プロパティは異なります。 特に、このイベント引数オブジェクトには ExitApplication 、ハンドルされない例外を無視して (アプリケーションを不明な状態のままにして) アプリケーションの実行を継続できるようにするプロパティがあります。 その場合、 AppDomain.UnhandledException イベントは発生しません。