3

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

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

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

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

4

2 回答 2

4

几个选项:

  • 当应用程序开始关闭(FormClosing?)时,您可以开始干净地退出线程(通过某处的标志)
  • 大概是为了与您的 UI 交谈,您正在引发由 UI 处理的事件(处理同步等) - 保留一个标志,并且(如果这样做是安全的)如果已设置标志(再次,因为你要退出)
  • 退出时,让 UI 取消订阅事件
于 2009-05-01T07:23:27.317 回答
1

除了Marc Gravell 的建议之外,还有一些其他内容:

  • 从任何时候开始,您都可以Environment.HasShutdownStarted在执行任何可能导致ObjectDisposed异常的操作之前进行检查
  • 如果您正在访问任何 Windows 窗体,您可以检查.IsDisposed(所有窗体和控件都有它)
于 2009-05-01T08:18:49.070 回答