WPF 提供了一种非常方便的方法来处理意外异常:我只需将处理程序附加到Application.DispatcherUnhandledException 事件,所有未处理的异常都会这样:
Application.Current.DispatcherUnhandledException += (sender, e) => {
// Show message, log exception, etc.
};
这适用于WPF 应用程序项目。现在,我有一个带有 WPF windows 的库,它是从非 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 块?
我试过的: