Application.DispatcherUnhandledException Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Występuje, gdy wyjątek jest zgłaszany przez aplikację, ale nie jest obsługiwany.
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
Typ zdarzenia
Przykłady
W poniższym przykładzie pokazano, jak przetwarzać nieobsługiwane wyjątki przez obsługę DispatcherUnhandledException zdarzenia.
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
Uwagi
Domyślnie Windows Presentation Foundation przechwytuje nieobsługiwane wyjątki, powiadamia użytkowników o wyjątku z okna dialogowego (z którego mogą zgłaszać wyjątek) i automatycznie zamyka aplikację.
Jeśli jednak aplikacja musi wykonać niestandardowe nieobsługiwane przetwarzanie wyjątków ze scentralizowanej lokalizacji, należy obsłużyć funkcję DispatcherUnhandledException.
DispatcherUnhandledException jest zgłaszany przez wyjątek Application , który jest nieobsługiwany przez kod działający w głównym wątku interfejsu użytkownika.
Jeśli wyjątek nie jest obsługiwany w wątku interfejsu użytkownika w tle (wątku z własnym Dispatcher) lub wątku procesu roboczego w tle (wątku bez Dispatcher), wyjątek nie jest przekazywany do głównego wątku interfejsu użytkownika. W związku z tym DispatcherUnhandledException nie jest podniesiona. W takich okolicznościach należy napisać kod, aby wykonać następujące czynności:
Obsługa wyjątków w wątku w tle.
Wyślij te wyjątki do głównego wątku interfejsu użytkownika.
Przewróć je w głównym wątku interfejsu użytkownika bez obsługi ich, aby umożliwić DispatcherUnhandledException ich podniesienie.
Aby uzyskać więcej informacji, zobacz Omówienie modelu wątkowania .
Procedura DispatcherUnhandledException obsługi zdarzeń jest przekazywana DispatcherUnhandledExceptionEventArgs argument zawierający informacje kontekstowe dotyczące wyjątku, w tym:
Wyjątek (Exception).
Z Dispatcher którego pochodzi (Dispatcher).
Możesz użyć tych informacji, aby określić, czy wyjątek można odzyskać, czy nie. Wyjątek możliwy do odzyskania może być FileNotFoundExceptionwyjątkiem , na przykład, podczas gdy nieodwracalny wyjątek może być na StackOverflowExceptionprzykład .
Podczas przetwarzania nieobsługiwanego wyjątku z DispatcherUnhandledExceptionprogramu i nie chcesz, aby program WPF kontynuował jego przetwarzanie, należy ustawić Handled właściwość na true
.
W przeciwieństwie do innych zgłaszanych zdarzeń Application nie DispatcherUnhandledException ma zgodnej chronionej implementacji wirtualnej (OnDispatcherUnhandledException). W związku z tym klasy pochodzące z Application programu muszą zawsze rejestrować procedurę obsługi zdarzeń, DispatcherUnhandledException aby przetwarzać nieobsługiwane wyjątki.