在进程关闭期间处理ObjectDisposedException和类似的异常?

时间:2009-05-01 07:20:49

标签: .net exception events objectdisposedexception

我的应用程序通常在10-20个线程上运行,这些线程几乎每秒都会向GUI发送事件以更新某些控件。

当用户关闭这些应用程序的中间时,与这些事件相关的所有更新都会导致多次随机崩溃。主要是ObjectDisposedExceptionNullReferenceException

由于.NET Framework已经抛出但尚未处理的事件,因此它们不处于我可以取消它们的状态。

我不太确定处理此问题的最佳方法。目前我只是吞下例外情况。

2 个答案:

答案 0 :(得分:4)

一些选择:

  • 当应用程序开始关闭(FormClosing?)时,您可以开始干净地退出线程(通过某处的标记)
  • 可能是为了与您的UI交谈,您正在提出由UI处理的事件(处理同步等) - 保留一个标志,并且(如果安全的话)只需删除事件(如果已设置标志) (再次,因为你要退出)
  • 退出时,让UI取消订阅活动

答案 1 :(得分:1)

除了Marc Gravell's suggestions之外,还有以下几点:

  • 在任何情况下,您可以在执行可能导致Environment.HasShutdownStarted例外的任何事情之前检查ObjectDisposed
  • 如果您正在访问任何Windows表单,可以查看.IsDisposed(所有表单和控件都有)