Sdílet prostřednictvím


Application.DispatcherUnhandledException Událost

Definice

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:

  1. Zpracování výjimek ve vlákně na pozadí.

  2. Odešlete tyto výjimky do hlavního vlákna uživatelského rozhraní.

  3. 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ří:

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.

Platí pro