AppDomain.UnhandledException-Ereignis

Tritt auf, wenn eine Ausnahme nicht abgefangen wird.

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Event UnhandledException As UnhandledExceptionEventHandler
'Usage
Dim instance As AppDomain
Dim handler As UnhandledExceptionEventHandler

AddHandler instance.UnhandledException, handler
public event UnhandledExceptionEventHandler UnhandledException
public:
virtual event UnhandledExceptionEventHandler^ UnhandledException {
    void add (UnhandledExceptionEventHandler^ value) sealed;
    void remove (UnhandledExceptionEventHandler^ value) sealed;
}
/** @event */
public final void add_UnhandledException (UnhandledExceptionEventHandler value)

/** @event */
public final void remove_UnhandledException (UnhandledExceptionEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Hinweise

Dieses Ereignis stellt eine Benachrichtigung über nicht abgefangene Ausnahmen bereit. Es ermöglicht der Anwendung, Informationen über die Ausnahme zu protokollieren, bevor der Standardereignishandler des Systems den Benutzer über die Ausnahme informiert und die Anwendung beendet. Sind ausreichende Informationen über den Zustand der Anwendung verfügbar, können andere Aktionen durchgeführt werden, z. B. das Speichern von Programmdaten für die Wiederherstellung zu einem späteren Zeitpunkt. Jedoch ist dabei Vorsicht geboten, da eine nicht behandelte Ausnahme Programmdaten unwiederbringlich beschädigen kann.

Hinweis

In den Versionen 1.0 und 1.1 von .NET Framework wird der Benutzer über Optionen zum Debuggen und zum Beenden der Anwendung informiert, bevor dieses Ereignis ausgelöst wird.

Dieses Ereignis kann in jeder Anwendungsdomäne behandelt werden. Wenn die Behandlung in der Standardanwendungsdomäne erfolgt, wird es für alle unbehandelten Ausnahmen in jeder beliebigen Anwendungsdomäne ausgelöst. Wenn das Ereignis in einer untergeordneten Domäne behandelt wird, wird es ausschließlich für unbehandelte Ausnahmen in dieser Domäne ausgelöst. Wenn das Ereignis sowohl in der Standarddomäne als auch in der untergeordneten Domäne behandelt wird, löst eine unbehandelte Ausnahme in der untergeordneten Domäne das Ereignis in beiden Domänen aus.

Hinweis

In den Versionen 1.0 und 1.1 von .NET Framework tritt dieses Ereignis nur für die Anwendungsdomäne auf, die beim Starten einer Anwendung vom System erstellt wird. Wenn eine Anwendung zusätzliche Anwendungsdomänen erstellt, ist die Angabe eines Delegaten für dieses Ereignis in diesen Anwendungsdomänen wirkungslos.

In den Versionen 1.0 und 1.1 von .NET Framework wurde eine unbehandelte Ausnahme, die in einem anderen als dem Hauptanwendungsthread auftrat, von der Laufzeit abgefangen und führte daher nicht zum Beenden der Anwendung. So war es möglich, dass das UnhandledException-Ereignis ausgelöst wurde, ohne dass die Anwendung beendet wurde. In .NET Framework Version 2.0 wurde diese Option für unbehandelte Ausnahmen in untergeordneten Threads entfernt, da solche stillen Fehler zu einer Verschlechterung der Leistung, beschädigten Daten und Lockups führten, was insgesamt schwer zu beheben war. Weitere Informationen finden Sie unter Ausnahmen in verwalteten Threads.

Zum Registrieren eines Ereignishandlers für dieses Ereignis müssen Sie über die erforderlichen Berechtigungen verfügen. Andernfalls wird eine SecurityException ausgelöst.

Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Behandeln von Ereignissen.

Beispiel

Im folgenden Beispiel wird das UnhandledException-Ereignis veranschaulicht.

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
using System;
using System.Security.Permissions;

public class Test {

   [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlAppDomain)]
   public static void Example()
   {
      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);
   }

   public static void Main() {
      Example();
   }
}
public ref class Test
{
private:
   static void MyHandler( Object^ /*sender*/, UnhandledExceptionEventArgs^ args )
   {
      Exception^ e = dynamic_cast<Exception^>(args->ExceptionObject);
      Console::WriteLine( "MyHandler caught : {0}", e->Message );
   }
public: 
   [SecurityPermissionAttribute( SecurityAction::Demand, ControlAppDomain = true )]
   static void Main()
   {
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   currentDomain->UnhandledException += gcnew UnhandledExceptionEventHandler( Test::MyHandler );
   try
   {
      throw gcnew Exception( "1" );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Catch clause caught : {0}", e->Message );
   }

   throw gcnew Exception( "2" );
   
   // Output:
   //   Catch clause caught : 1
   //   MyHandler caught : 2
   }
};

int main()
{
   Test::Main();
}

.NET Framework-Sicherheit

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

AppDomain-Klasse
AppDomain-Member
System-Namespace