c# – 异常越过Application.ThreadException和AppDomain.CurrentDomain.UnhandledException

我遇到了应用程序挂起的问题,并给出了默认的“请告诉Microsoft有关此问题”的弹出窗口,而不是应用程序中的“未处理的异常”对话框.

在应用程序代码中,Application.ThreadException和AppDomain.CurrentDomain.UnhandledException都被重定向到将错误日志写入磁盘,将屏幕截图保存到磁盘并显示友好对话框的方法.

但是当发生这种错误时,这三件事都不会发生.我得到的只是在事件查看器中:

EventType clr20e3,P1 myapp.exe,P2 4.0.0.0,P3 47d794d4,P4 mscorlib,P5 2.0.0.0,P6 471ebc5b,P7 15e5,P8 27,P9 system.argumentoutofrange,P10 NIL

鉴于错误似乎只是在应用程序运行了几个小时之后才发生,我想知道它是否可能是内存泄漏问题.我搜索了一下“clr20e3”,但只能找到ASP.Net的东西.我的应用程序是Windows Forms(.Net 2.0)exe,使用了很多程序集 – 在C#和一些非托管C中.

我想它也可能是错误处理方法中的一个错误 – 正如一些答案建议的那样,我可能会尝试在错误处理程序的开头记录(但考虑到这几乎就是我所做的…).

任何帮助解决这个问题都将非常感激 – 无论是解决方案,还是如何找出问题的根本原因的建议.

更新:原始错误的根本原因是访问具有负索引的数组(即system.argumentoutofrange).为什么这个没有被困对我来说有点神秘,但考虑到两个异常被发送到相同的处理代码,我想知道是否可能没有(例如)两者都被调用并在资源上进行战斗的条件(例如,日志文件)?

我设法通过在错误处理代码中的任何其他内容之前执行EventLog.WriteEntry来证明这一点.现在添加了一个标志以防止错误处理中的重新进入,我似乎不再有问题…

最佳答案 只是在黑暗中拍摄 – 是否有可能从您的异常处理程序中抛出ArgumentOutOfRangeException?

另外,您没有说出有什么类型的应用程序有问题 – Application.ThreadException只影响WinForms线程,所以如果这不是GUI应用程序,它就没用了. (参见MSDN documentation中的备注部分)

点赞