我遇到了应用程序挂起的问题,并向我提供了默认的“请告诉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来证明这一点。现在添加了一个标志以防止在错误处理中重新进入,我似乎不再有问题......
答案 0 :(得分:1)
这里只是在黑暗中拍摄 - 是否有可能从您的异常处理程序中抛出ArgumentOutOfRangeException?
此外,您没有说出有什么类型的应用程序存在问题 - Application.ThreadException仅影响WinForms线程,因此如果这不是GUI应用程序,则它是无用的。 (参见MSDN documentation)中的备注部分
答案 1 :(得分:1)
您是否检查过{@ 1}}是否从您的处理程序本身抛出?可能值得在异常处理程序的条目上对事件日志或跟踪进行简单的写入,并确认您实际上正在执行它。
编辑: 有关写入事件日志的信息,请访问:
答案 2 :(得分:0)
您是否多次调用Application.Run()?这将显示您描述的相同症状。您必须编写自定义ApplicationContext类作为解决方法。根据通货膨胀调整后的0.02美元。