Udostępnij za pośrednictwem


Application.DispatcherUnhandledException Zdarzenie

Definicja

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:

  1. Obsługa wyjątków w wątku w tle.

  2. Wyślij te wyjątki do głównego wątku interfejsu użytkownika.

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

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.

Dotyczy