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

我使用Stack Overflow用户提供的这个function来更新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[] { }); } 

这个function到目前为止一直运作良好。 我刚刚遇到这个例外:

InvalidAsynchronousStateException

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

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

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