この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

AppDomain.UnhandledException イベント

 

公開日: 2016年10月

例外がキャッチされない場合に発生します。

名前空間:   System
アセンブリ:  mscorlib (mscorlib.dll 内)

public event UnhandledExceptionEventHandler UnhandledException

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

System_CAPS_noteメモ

.NET Framework バージョン 1.0 および 1.1 では、アプリケーションの終了とデバッグ オプションは、ユーザーに報告後はなく、このイベントは、前にします。

このイベントは、任意のアプリケーション ドメインで処理することができます。 ただし、いない必ずしもイベントは、例外が発生したアプリケーション ドメインでします。 スレッドのスタック全体が解除されたアンワインドため、まず、イベントを発生させることができますが、スレッドが開始したアプリケーション ドメインでは、該当する例外ハンドラーを検索せず場合にのみ、例外は処理ではありません。

System_CAPS_noteメモ

.NET Framework のバージョン 1.0 および 1.1 では、このイベントは、アプリケーションが開始されたときに、システムによって作成される既定のアプリケーション ドメインに対してのみ発生します。 アプリケーションでは、追加のアプリケーション ドメインを作成する場合は、それらのアプリケーション ドメインでこのイベントのデリゲートを指定することも効果はありません。

場合、UnhandledException既定のアプリケーション ドメインでイベントを処理、いずれかのハンドルされない例外でどのようなアプリケーション ドメインに関係なく、任意のスレッド開始されたスレッドの存在は生成です。 イベント ハンドラーを持つアプリケーション ドメインでスレッドを開始するかどうかはUnhandledException、そのアプリケーション ドメインで、イベントが発生します。 そのアプリケーション ドメインが既定のアプリケーション ドメインと既定のアプリケーション ドメインで、イベント ハンドラーはまた、両方のアプリケーション ドメインで、イベントが発生します。

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

System_CAPS_noteメモ

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

イベント ハンドラーがある場合、ReliabilityContractAttribute属性、イベント ハンドラーが制約された実行領域として扱われるよう、適切なフラグです。

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

.NET Framework バージョン 1.0 および 1.1 では、アプリケーションのメイン スレッド以外のスレッドで発生した未処理の例外は、ランタイムによってが検出され、アプリケーションが終了されることはないです。 したがって、ことができるよう、UnhandledExceptionアプリケーションを終了せず発生するイベントです。 以降、.NET Framework version 2.0 では、この安全子スレッドでハンドルされない例外のため、削除されましたサイレントこのような障害の累積的な効果には、パフォーマンスの低下、データの破損、およびデバッグが困難にすべてがハングアップが含まれています。 これで、ランタイムが終了しない、ケースのリストを含む詳細については、次を参照してください。Exceptions in Managed Threadsです。

このイベントのイベント ハンドラーを登録するには、必要なアクセス許可が必要、またはSecurityExceptionがスローされます。

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

特定のアプリケーション モデル、UnhandledExceptionイベントは、メイン アプリケーション スレッドでハンドルされない例外が発生した場合の他のイベント割り込まことができます。

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

Microsoft Visual Studio 2005 以降では、Visual Basic アプリケーション フレームワークは、メイン アプリケーション スレッドでハンドルされない例外の別のイベントを提供します。 参照してください、WindowsFormsApplicationBase.UnhandledExceptionイベント。 このイベントがイベント引数オブジェクトによって使用されるイベント引数オブジェクトと同じ名前のAppDomain.UnhandledException、ですが、さまざまなプロパティです。 具体的には、このイベントの引数オブジェクトが、ExitApplicationプロパティにより、アプリケーションは引き続き実行されている、未処理の例外は無視されます (および不明な状態で、アプリケーションのまま) です。 その場合は、AppDomain.UnhandledExceptionイベントは発生しません。

次の例で示します、UnhandledExceptionイベント。 イベント ハンドラーを定義MyHandler既定のアプリケーション ドメインでハンドルされない例外がスローされるたびに呼び出されます。 2 つの例外をスローします。 最初はによって処理される、 try ブロックと catchブロックします。 2 つ目が処理されないと起動、MyHandleルーチン、アプリケーションが終了する前にします。

using System;
using System.Security.Permissions;

public class Example 
{
   [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
   public static void Main()
   {
      AppDomain currentDomain = AppDomain.CurrentDomain;
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

      try {
         throw new Exception("1");
      } catch (Exception e) {
         Console.WriteLine("Catch clause caught : {0} \n", e.Message);
      }

      throw new Exception("2");
   }

   static void MyHandler(object sender, UnhandledExceptionEventArgs args) 
   {
      Exception e = (Exception) args.ExceptionObject;
      Console.WriteLine("MyHandler caught : " + e.Message);
      Console.WriteLine("Runtime terminating: {0}", args.IsTerminating);
   }
}
// The example displays the following output:
//       Catch clause caught : 1
//       
//       MyHandler caught : 2
//       Runtime terminating: True
//       
//       Unhandled Exception: System.Exception: 2
//          at Example.Main()  

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

.NET Framework
1.1 以降で使用可能
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
トップに戻る
表示: