我的应用程序通常在 10-20 个线程上运行,这些线程几乎每秒都会向 GUI 发送事件以更新某些控件。
当用户关闭这些中间的应用程序时,与这些事件相关的所有更新都会导致几次随机崩溃。主要是ObjectDisposedException和NullReferenceException。
由于事件已经抛出但尚未由 .NET Framework 处理,因此它们不处于我可以取消它们的状态。
我不太确定处理这个问题的最佳方法。目前我只是吞下例外的例外。
我的应用程序通常在 10-20 个线程上运行,这些线程几乎每秒都会向 GUI 发送事件以更新某些控件。
当用户关闭这些中间的应用程序时,与这些事件相关的所有更新都会导致几次随机崩溃。主要是ObjectDisposedException和NullReferenceException。
由于事件已经抛出但尚未由 .NET Framework 处理,因此它们不处于我可以取消它们的状态。
我不太确定处理这个问题的最佳方法。目前我只是吞下例外的例外。
几个选项:
FormClosing?)时,您可以开始干净地退出线程(通过某处的标志)除了Marc Gravell 的建议之外,还有一些其他内容:
Environment.HasShutdownStarted在执行任何可能导致ObjectDisposed异常的操作之前进行检查.IsDisposed(所有窗体和控件都有它)