Application.DispatcherUnhandledException 事件

定义

在异常由应用程序引发但未进行处理时发生。

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 

事件类型

示例

以下示例演示如何通过处理 DispatcherUnhandledException 事件来处理未经处理的异常。

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

注解

默认情况下,Windows Presentation Foundation捕获未经处理的异常,从对话框中通知用户异常 (,他们可以从该对话框中报告异常) ,并自动关闭应用程序。

但是,如果应用程序需要从集中位置执行自定义未经处理的异常处理,则应处理 DispatcherUnhandledException

DispatcherUnhandledException对于Applicationmain UI 线程上运行的代码未处理的每个异常,都会引发 。

如果在后台 UI 线程 (具有自身Dispatcher) 的线程或后台工作线程 (没有Dispatcher) 的线程上处理异常,则不会将异常转发到main UI 线程。 因此, DispatcherUnhandledException 不会引发。 在这些情况下,需要编写代码来执行以下操作:

  1. 处理后台线程上的异常。

  2. 将这些异常调度到main UI 线程。

  3. 在main UI 线程上重新引发它们,而无需处理它们以允许DispatcherUnhandledException引发它们。

有关详细信息,请参阅 线程模型 概述。

DispatcherUnhandledException 事件处理程序传递一个 DispatcherUnhandledExceptionEventArgs 参数,其中包含有关异常的上下文信息,包括:

可以使用此信息来确定异常是否可恢复。 例如,可恢复异常可以是 FileNotFoundException,而不可恢复的异常可能是 StackOverflowException,例如。

处理来自 DispatcherUnhandledException的未经处理的异常,并且不希望 WPF 继续处理它时,需要将 Handled 属性设置为 true

与其他引发的事件 Application 不同, DispatcherUnhandledException 没有匹配的受保护虚拟实现 (OnDispatcherUnhandledException) 。 因此,派生自 Application 的类必须始终向 DispatcherUnhandledException 注册事件处理程序,才能处理未经处理的异常。

适用于