Compartilhar via


Application.DispatcherUnhandledException Evento

Definição

Ocorre quando uma exceção é gerada por um aplicativo, mas não tratada.

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 

Tipo de evento

Exemplos

O exemplo a seguir mostra como processar exceções sem tratamento manipulando o DispatcherUnhandledException evento.

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

Comentários

Por padrão, Windows Presentation Foundation captura exceções sem tratamento, notifica os usuários da exceção de uma caixa de diálogo (da qual eles podem relatar a exceção) e desliga automaticamente um aplicativo.

No entanto, se um aplicativo precisar executar o processamento personalizado de exceção sem tratamento de um local centralizado, você deverá lidar com DispatcherUnhandledException.

DispatcherUnhandledExceptioné gerado por uma Application exceção para cada que não é tratada pelo código em execução no thread de interface do usuário main.

Se uma exceção não for tratada em um thread de interface do usuário em segundo plano (um thread com seu próprio Dispatcher) ou em um thread de trabalho em segundo plano (um thread sem um Dispatcher), a exceção não será encaminhada para o thread de interface do usuário main. Consequentemente, DispatcherUnhandledException não é gerado. Nestas circunstâncias, você precisará escrever código para fazer o seguinte:

  1. Tratar exceções no thread em segundo plano.

  2. Envie essas exceções para o thread de interface do usuário main.

  3. Retomá-los no thread de interface do usuário main sem manejá-los para permitir que DispatcherUnhandledException sejam gerados.

Para obter mais informações, consulte a Visão geral do Modelo de Threading .

O DispatcherUnhandledException manipulador de eventos é passado um DispatcherUnhandledExceptionEventArgs argumento que contém informações contextuais sobre a exceção, incluindo:

Você pode usar essas informações para determinar se uma exceção é recuperável ou não. Uma exceção recuperável pode ser um FileNotFoundException, por exemplo, enquanto uma exceção irrecuperável pode ser um StackOverflowException, por exemplo.

Quando você processa uma exceção sem tratamento de DispatcherUnhandledExceptione não deseja que o WPF continue processando-a, você precisa definir a Handled propriedade como true.

Ao contrário dos outros eventos gerados Application , DispatcherUnhandledException não tem uma implementação virtual protegida correspondente (OnDispatcherUnhandledException). Consequentemente, as classes derivadas de Application devem sempre registrar um manipulador de eventos com DispatcherUnhandledException para processar exceções sem tratamento.

Aplica-se a