为什么不能抓住我的例外

时间:2009-08-03 19:56:12

标签: c# wpf winforms .net-3.5 exception-handling

我有一个混合了Winforms和WPF的应用程序。在Winforms中,我有一个全局异常处理程序,定义如下:

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;

此ALWAYS会在我的应用程序中的任何地方捕获异常情况下未预期和处理的异常。

对于WPF,我似乎能够捕获的是:

 wpfAppDomain = new System.Windows.Application();
 wpfAppDomain.DispatcherUnhandledException +=
         wpfAppDomain_DispatcherUnhandledException;

这并不总能捕获全局异常,而且我经常发现某些异常被吞并了,我不确定原因。

如何为WPF创建一个全局异常处理程序,它可以捕获任何未处理的异常?

3 个答案:

答案 0 :(得分:1)

在某些情况下,此代码不会捕获异常并按设计执行此操作

  • 这个例外根本无法捕获。例如,运行时抛出StackOverflowException
  • 异常在您的代码中未处理,但在核心WPF框架中被捕获。

没有办法捕获所有抛出的异常。这样做会让你违反应该始终有效的代码语义。

答案 1 :(得分:0)

打电话给SetUnhandledExceptionMode之后你试过这个吗?像这样:

// Force all exceptions through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

答案 2 :(得分:0)

DispatcherUnhandledException仅捕获调度程序调用的代码中的异常(如名称所示),它应该捕获从WPF代码调用时抛出的异常。

它不包括从以下引发的异常:WinForms,BackgroundWorker,您自己创建的线程池或线程。

你仍然可以使用AppDomain.CurrentDomain.UnhandledException来捕获它们。