首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的异常没有被捕获

为什么我的异常没有被捕获
EN

Stack Overflow用户
提问于 2009-08-03 19:56:12
回答 3查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;

这总是捕获我的应用程序中任何地方发生的异常,这些异常都不是预期的,并且处理得很好。

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

代码语言:javascript
复制
 wpfAppDomain = new System.Windows.Application();
 wpfAppDomain.DispatcherUnhandledException +=
         wpfAppDomain_DispatcherUnhandledException;

这并不总是捕获全局异常,我经常发现异常在某个地方被吞噬,我不确定为什么。

如何为WPF创建全局异常处理程序,以便捕获发生的任何未处理的异常?

EN

回答 3

Stack Overflow用户

发布于 2009-08-03 20:06:05

在某些情况下,此代码不会捕获异常,而这是设计好的

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

没有办法捕获所有抛出的异常。这样做将允许您违反本应始终有效的代码的语义。

票数 1
EN

Stack Overflow用户

发布于 2009-08-03 20:11:35

在调用SetUnhandledExceptionMode之后,你有没有尝试过?如下所示:

代码语言:javascript
复制
// Force all exceptions through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
票数 0
EN

Stack Overflow用户

发布于 2009-08-04 11:05:46

DispatcherUnhandledException只捕获调度程序调用的代码中的异常(顾名思义),它应该捕获从WPF代码调用时抛出的异常。

它不包括从以下位置抛出的异常: WinForms、BackgroundWorker、线程池或您自己启动的线程。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1224303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档