次の方法で共有


AppDomain.UnhandledException イベント

イベント ハンドラによって例外がキャッチされなかったときに発生します。

Public Overridable Event UnhandledException As _
   UnhandledExceptionEventHandler
[C#]
public virtual event UnhandledExceptionEventHandler   UnhandledException;
[C++]
public: virtual __event UnhandledExceptionEventHandler*   UnhandledException;

[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。

イベント データ

イベント ハンドラが、このイベントに関連するデータを含む、UnhandledExceptionEventArgs 型の引数を受け取りました。次の UnhandledExceptionEventArgs プロパティには、このイベントの固有の情報が記載されます。

プロパティ 説明
ExceptionObject 未処理の例外オブジェクトを取得します。
IsTerminating 共通言語ランタイムが終了中かどうかを示します。

解説

このイベントの UnhandledExceptionEventHandler デリゲートは、キャッチされなかった例外に対して既定の処理を実行します。このイベントが処理されない場合は、システムの既定のハンドラが例外をレポートし、アプリケーションを終了します。

このイベントは、アプリケーションの起動時にシステムによって作成されたアプリケーション ドメインに対してだけ発生します。アプリケーションが追加のアプリケーション ドメインを作成する場合、それらの追加アプリケーション ドメインでこのイベントのデリゲートを指定しても無効です。

このイベントに対するイベント ハンドラを登録するには、Permissions のセクションで説明したアクセス許可が必要です。適切なアクセス許可がない場合は、SecurityException が発生します。

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

使用例

[Visual Basic, C#, C++] UnhandledException イベントのサンプルを次に示します。

 
Sub Main()
   Dim currentDomain As AppDomain = AppDomain.CurrentDomain
   AddHandler currentDomain.UnhandledException, AddressOf MyHandler
   
   Try
      Throw New Exception("1")
   Catch e As Exception
      Console.WriteLine("Catch clause caught : " + e.Message)
   End Try
   
   Throw New Exception("2")

   ' Output:
   '   Catch clause caught : 1
   '   MyHandler caught : 2
End Sub 'Main


Sub MyHandler(sender As Object, args As UnhandledExceptionEventArgs)
   Dim e As Exception = DirectCast(args.ExceptionObject, Exception)
   Console.WriteLine("MyHandler caught : " + e.Message)
End Sub 'MyUnhandledExceptionEventHandler

[C#] 
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 : " + e.Message);
   }

   throw new Exception("2");

   // Output:
   //   Catch clause caught : 1
   //   MyHandler caught : 2
}

static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
   Exception e = (Exception) args.ExceptionObject;
   Console.WriteLine("MyHandler caught : " + e.Message);
}

[C++] 
public __gc class Test {
public:   
   static void MyHandler(Object* /*sender*/, UnhandledExceptionEventArgs* args) {
      Exception* e = dynamic_cast<Exception*> (args->ExceptionObject);
      Console::WriteLine(S"MyHandler caught : {0}", e->Message);
   }
};

int main() {
   AppDomain* currentDomain = AppDomain::CurrentDomain;
   currentDomain->UnhandledException += new UnhandledExceptionEventHandler(0, Test::MyHandler);

   try {
      throw new Exception(S"1");
   } catch (Exception* e) {
      Console::WriteLine(S"Catch clause caught : {0}", e->Message);
   }

   throw new Exception(S"2");

   // Output:
   //   Catch clause caught : 1
   //   MyHandler caught : 2
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, Common Language Infrastructure (CLI) Standard

.NET Framework セキュリティ:

参照

AppDomain クラス | AppDomain メンバ | System 名前空間