Application.DispatcherUnhandledException 事件
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在异常由应用程序引发但未进行处理时发生。
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 不会引发。 在这些情况下,需要编写代码来执行以下操作:
处理后台线程上的异常。
将这些异常调度到main UI 线程。
在main UI 线程上重新引发它们,而无需处理它们以允许DispatcherUnhandledException引发它们。
有关详细信息,请参阅 线程模型 概述。
向 DispatcherUnhandledException 事件处理程序传递一个 DispatcherUnhandledExceptionEventArgs 参数,其中包含有关异常的上下文信息,包括:
异常 (Exception) 。
Dispatcher从中 () 。Dispatcher
可以使用此信息来确定异常是否可恢复。 例如,可恢复异常可以是 FileNotFoundException,而不可恢复的异常可能是 StackOverflowException,例如。
处理来自 DispatcherUnhandledException的未经处理的异常,并且不希望 WPF 继续处理它时,需要将 Handled 属性设置为 true
。
与其他引发的事件 Application 不同, DispatcherUnhandledException 没有匹配的受保护虚拟实现 (OnDispatcherUnhandledException) 。 因此,派生自 Application 的类必须始终向 DispatcherUnhandledException 注册事件处理程序,才能处理未经处理的异常。