WPF提供了一种处理意外异常的非常方便的方法:我可以将处理程序附加到Application.DispatcherUnhandledException event,所有未处理的异常都是这样的:
Application.Current.DispatcherUnhandledException += (sender, e) => {
// Show message, log exception, etc.
};
这适用于 WPF应用程序项目。现在,我有一个带有WPF窗口的库,它来自非WPF应用程序(它是一个传统的VBA应用程序,并且WPF库可以访问通过COM互操作)。
所以,问题是:我可以创建,打开并显示WPF窗口(这很好用),但我没有Application
实例。 Application.Current
是null
。我使用WPF类,但是我在WPF应用程序框架之外运行它们。
目前,此解决方案的唯一缺点是静默吞下WPF窗口事件处理程序代码中的异常:
void Button_click(sender as object, e as RoutedEventArgs) {
...
// some exception occurs here, but nobody hears her scream
...
}
我不喜欢这样。我想记录它们并显示错误消息。
我的问题:有没有办法在这种情况下全局捕获未处理的异常,或者我必须为我写的每个WPF窗口事件处理程序代码添加一个通用的try-catch-log块吗? / p>
我尝试过:
答案 0 :(得分:2)
改为附加到Dispatcher
:
Dispatcher.CurrentDispatcher.DispatcherUnhandledException += (sender, e) => {
// Show message, log exception, etc.
};
如果还没有调度程序存在,访问CurrentDispatcher
会自动创建一个单例调度程序,它也将由WPF窗口使用。