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, 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á manipular DispatcherUnhandledException.

DispatcherUnhandledException é gerado por uma Application exceção para cada exceção sem tratamento pelo código em execução no thread principal da interface do usuário.

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 um thread de trabalho em segundo plano (um thread sem um Dispatcher), a exceção não será encaminhada para o thread principal da interface do usuário. Consequentemente, DispatcherUnhandledException não é gerado. Nestas circunstâncias, você precisará escrever código para fazer o seguinte:

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

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

  3. Recune-os no thread principal da interface do usuário sem tratá-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, FileNotFoundExceptionpor exemplo, enquanto uma exceção irrecuperável pode ser uma StackOverflowException, por exemplo.

Quando você processa uma exceção sem tratamento e DispatcherUnhandledExceptionnã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 das Application quais derivam devem sempre registrar um manipulador DispatcherUnhandledException de eventos para processar exceções sem tratamento.

Aplica-se a