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

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

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

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

有帮助吗?

解决方案

几个选项:

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

其他提示

此外 马克·格拉维尔的建议, ,这里还有一些事情:

  • 从任何一点,您都可以检查 Environment.HasShutdownStarted 在做任何可能导致 ObjectDisposed 例外
  • 如果您正在访问任何 Windows 窗体,您可以检查 .IsDisposed (所有表单和控件都有它)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top