System.ObjectDisposedException

时间:2010-11-01 12:10:46

标签: c#

我正在运行一些Windows应用程序,它正在工作几天,然后停止工作,没有错误。现在我在事件查看器中发现了这个错误。也许有人知道什么会导致这个错误?

  

事件类型:错误

     

事件源:.NET Runtime 2.0错误报告事件

     

类别:无

     

事件ID:5000

     

日期:2010年10月30日

     

时间:21:58:57

     

用户:N / A

     

计算机:SERVER-PROD

     

描述:EventType   clr20r3,P1 program.exe,P2   1.0.0.0,P3 4cca7ed1,P4 mscorlib,P5 2.0.0.0,P6 4be90358,P7 1164,P8 0,P9 system.objectdisposedexception,P10   NIL。

2 个答案:

答案 0 :(得分:20)

ObjectDisposedException是:

  

对已处置对象执行操作时引发的异常。 (source

换句话说,如果实现了实现IDisposable接口的类的实例 - 通过调用Dispose()显式地或隐式地,例如它出现在using语句中或否则 - 任何在对象上调用方法的尝试都会引发上面的异常。

与大多数调试问题一样,如果没有实际查看代码并在调试器中运行它,很难说是什么导致了您的问题。你说在运行几天后程序崩溃了ObjectDisposedException。根据我的经验,这通常意味着两件事之一:

  1. 有一些非常不寻常的代码路径,一旦被占用,总会导致崩溃
  2. 程序中的线程之间存在race condition。因此,崩溃似乎无法预测并且可能难以再现
  3. 我的建议是在调试器中启动程序,并保持运行直到抛出异常。然后你可以回到这里并向我们提供相关代码,堆栈跟踪,调试输出等。

答案 1 :(得分:5)

正在访问已处置的对象。如果您在表单上有多线程,通常会发生这种情况。启动backgroundworker / thread / timer,然后处理表单。当backgroundworker / thread / timer尝试以某种方式更新表单时,会出现此异常。