.NET中UnhandledException和DispatcherUnhandledException之间的区别

use*_*392 24 .net c# wpf exception-handling unhandled-exception

.NET中的AppDomain.UnhandledExceptionApplication.DispatcherUnhandledException有什么区别?

我需要一个在发生任何未处理的异常时触发的事件.我遇到过这两个,但我不知道他们在哪些方面彼此不同.还有,有没有被解雇的情况?

Qua*_*ter 13

Application.DispatcherUnhandledException将处理WPF应用程序中主UI线程上抛出的异常. AppDomain.UnhandledException将处理在任何线程上抛出的异常并且从未捕获过.这包括您手动创建的线程或Console应用程序中的主线程.WPF正在捕获UI线程上的异常,因此您将看不到它们AppDomain.UnhandledException.

另请注意,未处理的异常通常会终止运行时,因此在AppDomain.UnhandledException引发之后,程序将立即退出.相反,Application.DispatcherUnhandledException正在捕捉异常,并将让您的程序继续.

  • 实际上,当不使用Application.DispatcherUnhandledException时,这些异常将显示在AppDomain.UnhandledException中,应用程序将立即退出. (7认同)

Han*_*ant 8

DispatcherUnhandledException仅由UI线程引发,并且仅在运行事件时引发异常时引发.特别是处理这些异常有一点传统,Windows Forms也使用Application.ThreadException(命名不佳,与线程无关).

原因是由于UI事件处理程序并不总是过于显着地改变程序状态,因此处理异常并保持程序活动的可能性很小.这需要一厢情愿的大量帮助.Windows Forms将此作为极端,它显示一个ThreadExceptionDialog,它具有一个Continue按钮,允许用户忽略该异常.WPF不这样做,你必须自己写一个像这样的对话框.这就是为什么活动在那里.

DispatcherUnhandledException的默认操作是不捕获异常.所以你可以忽略它,接下来会触发AppDomain.UnhandledException.