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

.net 在进程关闭期间处理ObjectDisposedException和类似异常?,.net,exception,events,objectdisposedexception,.net,Exception,Events,Objectdisposedexception,我的应用程序通常运行在10-20个线程上,这些线程几乎每秒钟向GUI发送事件以更新某些控件 当用户在这些事件中间关闭应用程序时,与这些事件相关的所有更新都会导致若干随机崩溃。主要是ObjectDisposedException和NullReferenceException 由于事件已经抛出,但尚未由.NET Framework处理,因此它们未处于我可以取消它们的状态 我不太确定处理这个问题的最佳方法。目前,我只接受例外例外。一些选项: 当应用程序开始关闭(FormClosing?)时,您可以开

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

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

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

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

一些选项:

  • 当应用程序开始关闭(
    FormClosing
    ?)时,您可以开始干净地退出线程(通过某个地方的标志)
  • 可能是为了与您的UI对话,您正在引发由UI处理的事件(处理同步等)-保留一个标志,并且(如果这样做是安全的)如果设置了标志(再次,因为您正在退出),只需删除事件
  • 退出时,让UI取消订阅事件
除此之外,还有几件事:

  • 在执行任何可能导致
    ObjectDisposed
    异常的操作之前,可以从任何位置检查
    Environment.hashutdownstarted
  • 如果您正在访问任何windows窗体,可以选中
    .IsDisposed
    (所有窗体和控件都有它)

我不知道Environment.hashutdownstarted听起来很有希望,我已经实现了FormClosing标志,但下次我会记住这一点。更大的问题是测试修复是否有效:),因为很难得到这个错误。