System.ObjectDisposedException

我正在运行一些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。

ObjectDisposedException是:

在已处置对象上执行操作时引发的exception。 ( 来源 )

换句话说,如果实现了实现IDisposable接口的类的实例 – 通过调用Dispose()显式地或者隐式地(例如,如果它出现在using语句中或其他方式) – 任何尝试调用方法的方法该对象将引发上述exception。

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

  1. 有一些非常不寻常的代码路径,一旦采取,总会导致崩溃
  2. 程序中的线程之间存在竞争条件 。 因此,崩溃看起来不可预测并且可能难以再现

我的建议是在调试器中启动程序,并保持运行直到抛出exception。 然后你可以回到这里并向我们提供相关代码,堆栈跟踪,调试输出等。

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