【发布时间】:2010-11-05 09:45:39
【问题描述】:
有什么方法可以处理 WPF 应用程序中的所有错误异常和崩溃?
我知道DispatcherUnhandledException,但它只处理 UI 线程中的异常,不是吗?
有没有办法捕捉和记录其他线程中的所有异常以及绑定错误?
【问题讨论】:
标签: wpf error-handling
有什么方法可以处理 WPF 应用程序中的所有错误异常和崩溃?
我知道DispatcherUnhandledException,但它只处理 UI 线程中的异常,不是吗?
有没有办法捕捉和记录其他线程中的所有异常以及绑定错误?
【问题讨论】:
标签: wpf error-handling
AppDomain.CurrentDomain.UnhandledException
将为当前线程捕获任何未处理的异常。这就是我们在应用程序中处理它的方式。
BindingErrors 总是被处理并记录到输出窗口。在发布之前,我们会检查输出窗口是否存在绑定错误并尽可能多地修复。
但是,我认为您不希望将绑定错误视为未处理的,因为它们大多是可以恢复的,应该在每次发布之前尽可能地修复它们。您可以在 Visual Studio 中更改 Debug > Exeptions 以使其抛出 BindingFailure 以获取更具体的信息。
【讨论】:
请记住,Microsoft 不建议捕获所有异常,而是建议仅捕获您知道(或期望在某个地方发生)的异常。更何况要获得“Certified for Microsoft [Windows|Vista]”标志,千万不能捕获未知异常,此类异常必须到Wer。
【讨论】:
是的,有 3 个地方:
Application.Run() 放入try ... catch
DispatcherUnhandledExceptionAppDomain.CurrentDomain.UnhandledException在任何一种情况下,您都应该显示请原谅我的消息并建议发送错误报告。
您服务器上的服务应回答“感谢您提交错误报告”或“问题已在下一个版本中修复”。请更新'
【讨论】:
Application.Run()。
这里有一个很好的解决方案,使用 NLog 进行日志记录:
Logging in .NET with NLog (default config file, catch all exceptions and route to logger, ...)
【讨论】: