【问题标题】:InvalidAsynchronousStateException in function that checks if invoke is required for control检查控制是否需要调用的函数中的 InvalidAsynchronousStateException
【发布时间】:2010-11-05 16:59:42
【问题描述】:

我使用 Stack Overflow 用户提供的此功能从 BackgroundWorker 更新控件。

static void SynchronizedInvoke(ISynchronizeInvoke sync, Action action)
{
    // If the invoke is not required, then invoke here and get out.
    if (!sync.InvokeRequired)
    {
        // Execute action.
        action();

        // Get out.
        return;
    }

    // Marshal to the required thread.
    sync.Invoke(action, new object[] { });
}

到目前为止,此功能一直运行良好。我刚刚得到了这个例外:

这是什么意思,我该如何预防?

【问题讨论】:

标签: c# backgroundworker


【解决方案1】:

这里的问题是ISynchronizeInvoke 对象绑定到的线程不再存在。例如,如果您生成一个后台线程并且 UI 线程在后台任务完成之前退出,就会发生这种情况。该线程不再存在,因此没有可调用的内容,您会得到异常。

没有很好的方法来防止这种情况。最好的做法是将Invoke 调用包装在处理此异常的try / catch 中。

【讨论】:

猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2017-12-20
相关资源
最近更新 更多