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 セキュリティ:
- SecurityPermission (このイベントのイベント ハンドラを作成するために必要なアクセス許可) SecurityAction.LinkDemand (関連する列挙体)