Application.DispatcherUnhandledException Evento
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
Manipular exceções no thread em segundo plano.
Envie essas exceções para o thread principal da interface do usuário.
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:
A exceção (Exception).
Do Dispatcher qual ele se originou (Dispatcher).
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.