我使用此功能由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[] { });
}
此功能一直运作至今。我刚刚得到了这个例外:
这是什么意思,我该如何预防?
答案 0 :(得分:2)
这里的问题是ISynchronizeInvoke
对象绑定到的线程不再存在。例如,如果您生成后台线程并且UI线程在后台任务完成之前退出,则会发生这种情况。该线程不再存在,因此没有任何东西可以调用,而且你得到了异常。
没有好办法防止这种情况发生。最好的做法是将Invoke
调用包装在处理此异常的try / catch
中。