【问题标题】:Multiple Invokes and thread safety多次调用和线程安全
【发布时间】: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


    【解决方案1】:

    不,只有一个 GUI 线程 - 所以最终调用的委托会被有效地排队等待串行执行。如果有多个 GUI 线程,您确实会在这里遇到竞争条件 - 但您对我所知道的所有 UI 框架都很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多