Application.UnhandledException Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt auf, wenn eine Ausnahme von App-Code behandelt werden kann, wie von einem Fehler auf nativer Ebene Windows-Runtime weitergeleitet. Apps können das Vorkommen als in Ereignisdaten behandelt markieren.
public:
virtual event UnhandledExceptionEventHandler ^ UnhandledException;
// Register
event_token UnhandledException(UnhandledExceptionEventHandler const& handler) const;
// Revoke with event_token
void UnhandledException(event_token const* cookie) const;
// Revoke with event_revoker
Application::UnhandledException_revoker UnhandledException(auto_revoke_t, UnhandledExceptionEventHandler const& handler) const;
public event UnhandledExceptionEventHandler UnhandledException;
function onUnhandledException(eventArgs) { /* Your code */ }
application.addEventListener("unhandledexception", onUnhandledException);
application.removeEventListener("unhandledexception", onUnhandledException);
- or -
application.onunhandledexception = onUnhandledException;
Public Custom Event UnhandledException As UnhandledExceptionEventHandler
Ereignistyp
Hinweise
Das UnhandledException-Ereignis wird verwendet, um die App über Ausnahmen zu benachrichtigen, die vom XAML-Framework oder von der Windows-Runtime im Allgemeinen auftreten, die nicht vom App-Code behandelt wurden.
Wenn beispielsweise der Windows-Runtime App-Code wie ein Ereignishandler aufruft und der App-Code eine Ausnahme auslöst und diese nicht abfangen kann, wird die Ausnahme zurück an den Windows-Runtime weitergegeben. Der Windows-Runtime löst dann das UnhandledException-Ereignis aus, um die App über diese Ausnahme zu benachrichtigen.
Die Behandlung von Ausnahmen in einer UnhandledException ist nur eine von vielen Techniken, die sowohl zum Debuggen als auch zur Behandlung von Ausnahmen zur Laufzeit und zur möglichen Wiederherstellung verwendet werden können. Weitere Informationen zu den vollständigen Techniken, die Sie für das Debuggen und die Fehlerbehandlung verwenden können, finden Sie unter Ausnahmebehandlung für in C# oder Visual Basic.
Beachten Sie, dass dieses Ereignis nur ausgelöst wird, wenn keine Möglichkeit mehr besteht, dass App-Code eine Ausnahme abfangen kann. Angenommen, ein App-Ereignishandler ruft eine Windows-Runtime-API auf, die wiederum einen Rückruf aufruft. Wenn der innere App-Code eine Ausnahme auslöst und diese nicht abfangen kann, wird die Ausnahme über die Windows-Runtime zurück an die äußere Ebene des App-Codes weitergegeben, die die Möglichkeit erhält, sie abzufangen. Das UnhandledException-Ereignis wird nur ausgelöst, wenn app-Code keine Möglichkeiten mehr hat, eine Ausnahme durch normale Weitergabe abzufangen.
Es ist auch möglich, dass eine Ausnahme ausgelöst wird und nie von App-Code abgefangen wird. Wenn das XAML-Framework beispielsweise ein Layout ausführt und eine Ausnahme ausgelöst wird, wird diese Ausnahme nicht über App-Code weitergegeben. In diesem Fall wird das UnhandledException-Ereignis ausgelöst. Dies ist das erste Mal, dass App-Code über die Ausnahme benachrichtigt wird.
Normalerweise beendet der Windows-Runtime nach dem Auslösen des UnhandledException-Ereignisses die App, da die Ausnahme nicht behandelt wurde. Der App-Code hat eine gewisse Kontrolle darüber: Wenn der UnhandledException-Ereignishandler die Handled-Eigenschaft der Ereignisargumente auf true festlegt, wird die App in den meisten Fällen nicht beendet. Dies wird jedoch aus verschiedenen Gründen nicht empfohlen:
- In der Regel verfügt der UnhandledException-Ereignishandler nicht über genügend Informationen, um zu wissen, ob die Fortsetzung nach einer Ausnahme sicher ist. Teile des Anwendungscodes oder der Windows-Runtime befinden sich möglicherweise in einem inkonsistenten Zustand, was zu nachfolgenden Fehlern führen kann, wenn die App den Code weiter ausführt.
- Die Windows-Runtime betrachtet Ausnahmen, die bei bestimmten Vorgängen auftreten, als nicht wiederherstellbar, da sich die Windows-Runtime selbst nach diesen Ausnahmen in einem inkonsistenten Zustand befindet. Bei solchen Ausnahmen wird die App auch dann beendet, wenn der UnhandledException-Ereignishandler Handled auf TRUE festlegt.
- Fehler, die während der Navigation auftreten, können zu einem Zustand führen, in dem nichts als Inhalt geladen ist und dem Benutzer nichts anzeigt, dass die App noch ausgeführt wird.
- Weitere Informationen zu diesen Punkten finden Sie unter Ausnahmebehandlung für in C# oder Visual Basic.
Eine wichtige Einschränkung besteht darin, dass die UnhandledException-Ereignisargumente nicht so viele Details wie die ursprüngliche Ausnahme enthalten, wie sie vom App-Code weitergegeben werden. Wenn die App eine bestimmte Verarbeitung einer bestimmten Ausnahme erfordert, ist es immer besser, die Ausnahme während der Weitergabe abzufangen, da dann mehr Details verfügbar sind. Die UnhandledException-Ereignisargumente machen ein Ausnahmeobjekt über die Exception-Eigenschaft verfügbar. Es ist jedoch nicht garantiert, dass der Typ, die Meldung und die Stapelüberwachung dieses Ausnahmeobjekts denen der ursprünglichen Ausnahme entsprechen, die ausgelöst wurde. Die Ereignisargumente machen eine Message-Eigenschaft verfügbar. In den meisten Fällen enthält dies die Meldung der ursprünglich ausgelösten Ausnahme.
Sie können keine Handler für UnhandledException in XAML (im Application-Element in App.xaml) verknüpfen. Sie müssen Handler für UnhandledException an das Application-Objekt im Code anfügen, entweder im Konstruktor oder in der Aktivierungslogik.
Für Windows 8.1-Apps können Ausnahmen von asynchronen Methodenaufrufen als UnhandledException-Ereignis weitergegeben werden. Dies schließt Ihre eigenen Implementierungen asynchroner Methoden ein (Aktivierungshandler usw.).