处理WPF应用程序中的所有异常的最佳做法是什么?

Ars*_*yan 10 wpf error-handling


有没有办法处理WPF应用程序中的所有错误异常和崩溃?我知道DispatcherUnhandledException,但它只处理UI线程中的异常,不是吗?有没有办法捕获并记录其他线程中的所有异常?和绑定错误呢?你如何在enterprice系统中实现这种要求?

Den*_*nis 10

AppDomain.CurrentDomain.UnhandledException
Run Code Online (Sandbox Code Playgroud)

将捕获当前线程的任何未处理的异常.这就是我们在应用程序中处理它的方式.

始终处理BindingErrors并将其记录到输出窗口.在发布之前,我们检查输出窗口是否存在绑定错误,并尽可能多地修复.

但是,我认为您不希望将绑定错误视为未处理,因为它们大多数可以恢复,并且应该在每次发布之前尽可能地修复.您可以在Visual Studio中更改Debug> Exeptions以使其抛出BindingFailure以获取更具体的信息.

HTH,

丹尼斯


boh*_*nko 5

是的,有3个地方:

  1. 放入...Application.Run()trycatch
  2. DispatcherUnhandledException
  3. AppDomain.CurrentDomain.UnhandledException

无论哪种情况,您都应该显示一条“请原谅我”消息并建议发送错误报告。

您服务器上的服务应该回答“感谢您提交错误报告”或“问题已在下一版本中修复”。请更新'

  • 我不认为 WPF 应用程序中存在“Application.Run()”。 (3认同)

arb*_*ter 3

请记住,Microsoft 不建议捕获所有异常,而是建议仅捕获您知道的异常(或预期在某个地方发生的异常)。更重要的是,如果你想获得“Certified for Microsoft [Windows|Vista]”标志,你一定不能捕获未知的异常,而此类异常必须转到Wer

  • 我相信您提到的微软建议不是从 try 块中捕获所有异常,即捕获异常。然而,OP 正在寻求一种解决方案来处理未捕获的异常,以便您可以通过通知用户崩溃并向您的开发/QA 团队发送崩溃报告电子邮件来处理这种情况。 (6认同)
  • 我同意,但是如果您确实捕获了所有异常,则仅记录它,这样您就可以找到常见错误并纠正它们。然后再次抛出异常。 (4认同)
  • 谢谢你的澄清。我们不会向 WER 提交错误信息,因为我们的申请是内部的。 (3认同)