Freigeben über


System.AppDo Standard. UnhandledException-Ereignis

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Das UnhandledException Ereignis stellt eine Benachrichtigung über ungenaue Ausnahmen bereit. Die Anwendung ermöglicht es der Anwendung, Informationen über die Ausnahme zu protokollieren, bevor der Systemstandardhandler die Ausnahme an den Benutzer meldet und die Anwendung beendet. Wenn ausreichende Informationen über den Anwendungsstatus verfügbar sind, können weitere Maßnahmen ergriffen werden , z. B. das Speichern von Programmdaten für eine spätere Wiederherstellung. Vorsicht wird empfohlen, da Programmdaten beschädigt werden können, wenn Ausnahmen nicht behandelt werden.

Dieses Ereignis kann in jeder Anwendung behandelt werden Standard. Das Ereignis wird jedoch nicht unbedingt in der Anwendung ausgelöst Standard wo die Ausnahme aufgetreten ist. Eine Ausnahme wird nur aufgehoben, wenn der gesamte Stapel für den Thread entwoben wurde, ohne einen anwendbaren Ausnahmehandler zu finden, sodass der erste Ort, an dem das Ereignis ausgelöst werden kann, in der Anwendung ausgeführt wird Standard wo der Thread stammt.

Wenn das UnhandledException Ereignis in der Standardanwendung behandelt wird Standard wird es für alle unbehandelten Ausnahmen in jedem Thread ausgelöst, unabhängig davon, in welcher Anwendung Standard der Thread gestartet wurde. Wenn der Thread in einer Anwendung gestartet wurde Standard für den ein Ereignishandler vorhanden UnhandledExceptionist, wird das Ereignis in dieser Anwendung ausgelöst Standard. Ist diese Anwendung Standard nicht die Standardanwendung Standard und es gibt auch einen Ereignishandler in der Standardanwendung Standard wird das Ereignis in beiden Anwendungen ausgelöst Standard.

Angenommen, ein Thread beginnt in der Anwendung Standard "AD1", ruft eine Methode in Anwendung do Standard "AD2" auf, und von dort wird eine Methode in der Anwendung aufgerufen Standard "AD3", wo eine Ausnahme ausgelöst wird. Die erste Anwendung Standard in der das UnhandledException Ereignis ausgelöst werden kann, ist "AD1". Wenn diese Anwendung nicht die Standardanwendung ist Standard Standard kann das Ereignis auch in der Standardanwendung ausgelöst werden Standard.

Hinweis

Die Common Language Runtime hält Threadabbrüche an, während Ereignishandler für das UnhandledException Ereignis ausgeführt werden.

Wenn der Ereignishandler über ein ReliabilityContractAttribute Attribut mit den entsprechenden Flags verfügt, wird der Ereignishandler als eingeschränkter Ausführungsbereich behandelt.

Ab .NET Framework 4 wird dieses Ereignis nicht für Ausnahmen ausgelöst, die den Status des Prozesses beschädigen, z. B. Stapelüberläufe oder Zugriffsverletzungen, es sei denn, der Ereignishandler ist sicherheitskritisch und verfügt über das HandleProcessCorruptedStateExceptionsAttribute Attribut.

Um einen Ereignishandler für dieses Ereignis zu registrieren, müssen Sie über die erforderlichen Berechtigungen verfügen oder ein SecurityException Ereignis ausgelöst wird.

Weitere Informationen zur Behandlung von Ereignissen finden Sie unter behandeln und Auslösen von Ereignissen.

Andere Ereignisse für unbehandelte Ausnahmen

Bei bestimmten Anwendungsmodellen kann das UnhandledException Ereignis durch andere Ereignisse vorab behoben werden, wenn die unbehandelte Ausnahme im Standard Anwendungsthread auftritt.

In Anwendungen, die Windows Forms verwenden, führen unbehandelte Ausnahmen im Standard Anwendungsthread dazu, dass das Application.ThreadException Ereignis ausgelöst wird. Wenn dieses Ereignis behandelt wird, ist das Standardverhalten, dass die unbehandelte Ausnahme die Anwendung nicht beendet, obwohl die Anwendung in einem unbekannten Zustand verbleibt. In diesem Fall wird das UnhandledException Ereignis nicht ausgelöst. Dieses Verhalten kann mithilfe der Anwendungskonfigurationsdatei oder mithilfe der Application.SetUnhandledExceptionMode Methode geändert werden, um den Modus UnhandledExceptionMode.ThrowException zu ändern, bevor der ThreadException Ereignishandler eingebunden wird. Dies gilt nur für den Standard Anwendungsthread. Das UnhandledException Ereignis wird für unbehandelte Ausnahmen ausgelöst, die in anderen Threads ausgelöst werden.

Das Visual Basic-Anwendungsframework stellt ein weiteres Ereignis für unbehandelte Ausnahmen im Standard Anwendungsthread bereit– das WindowsFormsApplicationBase.UnhandledException Ereignis. Dieses Ereignis verfügt über ein Ereignisargumentobjekt mit demselben Namen wie das von AppDomain.UnhandledException, aber mit unterschiedlichen Eigenschaften verwendete Ereignisargumentobjekt. Insbesondere verfügt dieses Ereignisargumentobjekt über eine ExitApplication Eigenschaft, die es der Anwendung ermöglicht, die Ausführung fortzusetzen, wobei die unbehandelte Ausnahme ignoriert wird (und die Anwendung in einem unbekannten Zustand bleibt). In diesem Fall wird das AppDomain.UnhandledException Ereignis nicht ausgelöst.