Application.UnhandledException Event

Tritt ein, wenn eine Ausnahme vom Anwendungscode ausgelöst wird, die auf Systemebene weitergeleitet wurde. Anwendungen können das Eintreten markieren, wie in den Ereignisdaten behandelt.

Syntax


public event UnhandledExceptionEventHandler UnhandledException

Ereignisinformationen

Delegat UnhandledExceptionEventHandler

Hinweise

Das UnhandledException-Ereignis wird verwendet, um die Anwendung über Ausnahmen zu benachrichtigen, die vom XAML-Framework ermittelt und nicht vom Anwendungscode behandelt wurden.

Wenn das XAML-Framework beispielsweise Anwendungscode wie einen Ereignishandler aufruft, und der Anwendungscode eine Ausnahme auslöst, aber nicht abfängt, wird die Ausnahme zurück zum XAML-Frameworkcode übertragen. Das XAML-Framework löst dann das UnhandledException-Ereignis aus, um die Anwendung über diese Ausnahme zu benachrichtigen.

Beachten Sie, dass dieses Ereignis nur ausgelöst wird, wenn keine Möglichkeit mehr besteht, dass Anwendungscode eine Ausnahme abfängt. Ein Beispiel: Der Ereignishandler einer Anwendung ruft ein XAML-Framework-API auf, das wiederum einen Anwendungsrückruf aufruft. Wenn der innere Anwendungscode eine Ausnahme auslöst und sie nicht abfängt, wird die Ausnahme über das XAML-Framework zurück zur äußeren Ebene des Anwendungscodes übermittelt, damit sie dort abgefangen werden kann. Das UnhandledException-Ereignis wird nur ausgelöst, wenn der Anwendungscode eine Ausnahme nicht mehr über die normale Propagierung abfangen kann.

Es ist auch möglich, dass eine Ausnahme ausgelöst wird, aber im Anwendungscode nie abgefangen werden kann. Wenn beispielsweise das XAML-Framework Layout ausführt und eine Ausnahme ausgelöst wird, wird diese Ausnahme nicht durch Anwendungscode weitergegeben. In diesem Fall wird das Ereignis UnhandledException ausgelöst, wobei es das erste Mal ist, dass Anwendungscode über die Ausnahme benachrichtigt wird.

Normalerweise beendet das XAML-Framework die Anwendung nach einer unbehandelten Ausnahme, also nachdem das UnhandledException-Ereignis ausgelöst wurde. Die Anwendung verfügt über eine gewisse Steuerung darüber – wenn der UnhandledException-Ereignishandler die Handled-Eigenschaft der Ereignisargumente auf true festlegt, wird die Anwendung in den meisten Fällen nicht beendet. Dies wird jedoch aus mehreren Gründen nicht empfohlen:

  • Normalerweise verfügt der UnhandledException-Ereignishandler nicht über genügend Informationen, um ermitteln zu können, ob die Fortsetzung nach Auftreten einer Ausnahme sicher ist. Teile des Anwendungscodes oder des XAML-Frameworks können sich in einem inkonsistenten Zustand befinden, der zu Fehlern führen kann, wenn die Anwendung weiterhin ausgeführt wird.
  • Bei bestimmten Vorgängen auftretende Ausnahmen werden vom XAML-Framework als nicht wiederherstellbar eingestuft, da der Laufzeitcode nach solchen Ausnahmen einen inkonsistenten Zustand annehmen würde. Für solche Ausnahmen wird die Anwendung weiterhin beendet, auch wenn der UnhandledException-Ereignishandler von Handled auf true geändert wird.

Es ist wichtig, einige Einschränkungen des UnhandledException-Ereignisses zu beachten. Dieses Ereignis wird nur in Verbindung mit Ausnahmen verwendet, die vom XAML-Framework erfasst werden. Ausnahmen, die von anderen Windows-Runtime-Komponenten oder von Teilen der Anwendung erkannt wurden, die nicht mit dem XAML-Framework verbunden sind, führen nicht dazu, dass dieses Ereignis ausgelöst wird. Wenn beispielsweise eine andere Windows-Komponente den Anwendungscode aufruft und eine Ausnahme ausgelöst und nicht abgefangen wird, wird das UnhandledException-Ereignis nicht ausgelöst. Wenn die App einen Arbeitsthread erstellt und dann eine Ausnahme im Arbeitsthread auslöst, wird das UnhandledException-Ereignis nicht ausgelöst.

Eine weitere Einschränkung besteht darin, dass die UnhandledException-Ereignisargumente nicht so viele Informationen wie die ursprüngliche Ausnahme enthalten. Wenn die Anwendung eine spezifische Verarbeitung einer bestimmten Ausnahme erfordert, empfiehlt es sich nach Möglichkeit immer, die Ausnahme bei der Weitergabe abzufangen, da ausführlichere Informationen verfügbar sein werden. Die UnhandledException-Ereignisargumente machen ein Ausnahmeobjekt über die Exception-Eigenschaft verfügbar. Allerdings entsprechen Typ, Meldung und Stapelüberwachung dieses Ausnahmeobjekts nicht unbedingt denen der ursprünglichen Ausnahme, die ausgelöst wurde. Die Ereignisargumente machen auch eine Message-Eigenschaft verfügbar. In den meisten Fällen wird diese die Meldung der ausgelösten Originalausnahme enthalten.

Sie können Handler für die UnhandledException in XAML nicht verknüpfen (für das Application-Element in App.xaml). Sie müssen Handler für UnhandledException im Application-Objekt im Code einfügen, entweder im Konstruktor oder in der Aktivierungslogik.

Bei Windows 8.1-Apps können Ausnahmen von asynchronen Aufrufen als UnhandledException-Ereignis weitergegeben werden. Dies schließt Ihren eigenen asynchronen Code ein (Aktivierungshandler usw.).

Anforderungen

Mindestens unterstützter Client

Windows 8

Mindestens unterstützter Server

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

Application

 

 

Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.