【问题标题】:Handling ObjectDisposedException and similar exceptions during the process shutdown?在进程关闭期间处理 ObjectDisposedException 和类似异常?
【发布时间】:2009-05-01 07:20:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: .net exception events objectdisposedexception


    【解决方案1】:

    几个选项:

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

    【讨论】:

      【解决方案2】:

      除了Marc Gravell's suggestions,还有以下几点:

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

      【讨论】:

      • 我不知道 Environment.HasShutdownStarted 听起来很有希望,我已经实现了 FormClosing 标志,但下次我会记住这一点。虽然测试修复是否有效,但更大的问题:) 因为很难得到这个错误。
      猜你喜欢
      • 2017-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2017-04-24
      • 2023-03-26
      • 2011-12-01
      相关资源
      最近更新 更多