在进程关闭期间处理 ObjectDisposeException 和类似异常?
-
03-07-2019 - |
题
我的应用程序通常在 10-20 个线程上运行,这些线程几乎每秒都会向 GUI 发送事件以更新某些控件。
当用户关闭其中的应用程序时,与这些事件相关的所有更新都会导致几次随机崩溃。大多 ObjectDisposedException
和 NullReferenceException
.
由于事件已引发但 .NET Framework 尚未处理,因此它们不处于我可以取消它们的状态。
我不太确定处理这个问题的最佳方法。目前我只是接受例外。
解决方案
几个选项:
- 当应用程序开始关闭时(
FormClosing
?),您可以开始干净地退出线程(通过某处的标志) - 大概是为了与你的用户界面交谈,你正在引发由用户界面处理的事件(它处理同步等) - 保留一个标志,并且(如果可以安全地这样做)如果标志已设置,则只需删除事件(再次,因为你要退出)
- 退出时,让 UI 取消订阅事件
其他提示
此外 马克·格拉维尔的建议, ,这里还有一些事情:
- 从任何一点,您都可以检查
Environment.HasShutdownStarted
在做任何可能导致ObjectDisposed
例外 - 如果您正在访问任何 Windows 窗体,您可以检查
.IsDisposed
(所有表单和控件都有它)
不隶属于 StackOverflow