让我们假设我有工作线程来增加某个控件的值。由于需要调用,所有增量都需要在 GUI 线程上完成。为此,我使用 BeginInvoke。
我的问题是:
竞争条件能否破坏控件的增量,因为多个工作线程都在 GUI 线程上同时调用(并且增量本身someControl.Value += value;
显然不是原子的)?
或者反过来说:
一个 Invoke 是否保证在另一个 Invoke 被处理之前完成?
delegate void valueDelegate(int value);
private void IncrementValue(int value)
{
if (InvokeRequired)
{
BeginInvoke(new valueDelegate(IncrementValue),value);
}
else
{
someControl.Value += value;
}
}
谢谢!