【发布时间】:2014-06-15 06:17:46
【问题描述】:
让我们假设我有工作线程来增加某个控件的值。由于需要调用,所有增量都需要在 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;
}
}
谢谢!
【问题讨论】:
标签: c# .net thread-safety invokerequired