我使用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[] { });
}


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



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

最佳答案

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

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

关于c# - 函数中的InvalidAsynchronousStateException,用于检查控件是否需要调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4108177/

10-09 21:59
查看更多