我有一个复杂的.net控制台应用程序,它使用WPF作为一些通知窗口,也做一些http调用。 在极少数情况下,该应用程序崩溃,我能够获得的唯一错误消息来自Windows事件查看器:
Application: xyz.exe
Description: The process was terminated due to an unhandled exception.
Exception Info: System.ObjectDisposedException
Stack:
at System.Runtime.InteropServices.SafeHandle.DangerousAddRef(Boolean ByRef)
at Microsoft.Win32.Win32Native.SetEvent(Microsoft.Win32.SafeHandles.SafeWaitHandle)
at System.Threading.TimerQueueTimer.Fire()
at System.Threading.TimerQueue.FireNextTimers()
我不知道堆栈跟踪来自哪里。任何想法在哪里寻找这个问题?以下是我的一些想法:
由于堆栈上有这个定时器的东西,它可能与System.Threading.Timer有关吗?因为代码中使用了一些定时器?
还有一些http通信(httpclient,httpwebrequest)正在使用超时。可能与此错误有关联吗?
很抱歉这个非常具体的问题,但我完全陷入困境,只是需要某种起点。
答案 0 :(得分:0)
我遇到了同样的问题并发现以下代码导致异常:
using (ManualResetEvent resetEvent = new ManualResetEvent(false))
{
timer.Dispose(resetEvent);
resetEvent.WaitOne(1000);
}
如果计时器未在一秒内处理,则可能发生异常。解决方案是 - 仅在WaitOne方法返回true时才配置resetEvent。