Application.DispatcherUnhandledException Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vyvolá se, když je vyvolán výjimka aplikací, ale není zpracována.
public:
event System::Windows::Threading::DispatcherUnhandledExceptionEventHandler ^ DispatcherUnhandledException;
public event System.Windows.Threading.DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException;
member this.DispatcherUnhandledException : System.Windows.Threading.DispatcherUnhandledExceptionEventHandler
Public Custom Event DispatcherUnhandledException As DispatcherUnhandledExceptionEventHandler
Event Type
Příklady
Následující příklad ukazuje, jak zpracovat neošetřené výjimky zpracováním DispatcherUnhandledException události.
using System.Windows;
using System.Windows.Threading;
namespace SDKSample
{
public partial class App : Application
{
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
// Process unhandled exception
// Prevent default unhandled exception processing
e.Handled = true;
}
}
}
Imports System.Windows
Imports System.Windows.Threading
Namespace SDKSample
Partial Public Class App
Inherits Application
Private Sub App_DispatcherUnhandledException(ByVal sender As Object, ByVal e As DispatcherUnhandledExceptionEventArgs)
' Process unhandled exception
' Prevent default unhandled exception processing
e.Handled = True
End Sub
End Class
End Namespace
Poznámky
ve výchozím nastavení Windows Presentation Foundation zachytává neošetřené výjimky, upozorní uživatele na výjimku z dialogového okna (ze kterého můžou výjimku nahlásit) a automaticky ukončí aplikaci.
Pokud ale aplikace potřebuje provádět vlastní zpracování neošetřených výjimek z centralizovaného umístění, měli byste zpracovat DispatcherUnhandledException.
DispatcherUnhandledException je vyvolána objektem Application pro každou výjimku, která je neošetřená kódem spuštěným v hlavním vlákně uživatelského rozhraní.
Pokud se výjimka nezpracuje ve vlákně uživatelského rozhraní na pozadí (vlákno s vlastním Dispatcher) nebo ve vlákně pracovního procesu na pozadí (vlákno bez Dispatcher), nepřesměruje se výjimka do hlavního vlákna uživatelského rozhraní. V důsledku toho DispatcherUnhandledException není vyvolána. Za těchto okolností budete muset napsat kód, který provede následující akce:
Zpracování výjimek ve vlákně na pozadí.
Odešlete tyto výjimky do hlavního vlákna uživatelského rozhraní.
Znovu je umístěte do hlavního vlákna uživatelského rozhraní, aniž byste je museli zpracovat, aby bylo možné DispatcherUnhandledException je zvýšit.
Další informace najdete v přehledu modelu threadingu .
Obslužné DispatcherUnhandledException rutině události se předá DispatcherUnhandledExceptionEventArgs argument, který obsahuje kontextové informace týkající se výjimky, mezi které patří:
Výjimka (Exception).
Hodnota Dispatcher , ze které pochází (Dispatcher).
Tyto informace můžete použít k určení, jestli je výjimka obnovitelná nebo ne. Obnovitelnou výjimkou může být FileNotFoundExceptionnapříklad , zatímco neopravitelná výjimka může být StackOverflowExceptionnapříklad .
Pokud zpracováváte neošetřenou výjimku z DispatcherUnhandledExceptiona nechcete, aby ji WPF dál zpracovávala, musíte vlastnost nastavit Handled na true
.
Na rozdíl od ostatních událostí, které Application vyvolá, DispatcherUnhandledException nemá odpovídající chráněnou virtuální implementaci (OnDispatcherUnhandledException). V důsledku toho musí třídy, které jsou odvozeny z Application , vždy zaregistrovat obslužnou rutinu události s DispatcherUnhandledException ke zpracování neošetřených výjimek.