函数中的InvalidAsynchronousStateException检查控件是否需要调用

时间:2010-11-05 16:59:42

标签: c# backgroundworker

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

此功能一直运作至今。我刚刚得到了这个例外:

InvalidAsynchronousStateException

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

1 个答案:

答案 0 :(得分:2)

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

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