我使用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/