在调用表单的方法之前,可以在整个表单上使用InvokeIfRequired吗?

时间:2017-01-06 03:54:11

标签: c# multithreading winforms user-interface invokerequired

在Winforms中,
我有一个非GUI线程侦听传入的UDP消息 当它收到消息时,它通过调用表单的方法之一更新表单上的各种UI组件。

这显然是一种竞争条件 似乎我想在每个组件上使用某种InvokeIfRequired模式。

我可以只获得一个锁,而不是在我们的代码中使用数百个这些InvokeIfRequired条件和lambdas来提供人们似乎建议的地方吗?我可以围绕对表单的单个调用引入线程安全调整,而不必修改表单代码的内部吗?

我正在运行的线程看起来像这样:

private static void HandleMessages(frmGui gui)
{
   while(true){
      if (/*udp message found*/){
          gui.UpdateLotsOfGuiComponents();
      }
   }
}

表单看起来像这样:

public partial class frmGui : Form
{
    public void UpdateLotsOfGuiComponents()
    {
        //lots of UI changes through a large call stack
    }
}

我希望能在我的电话周围放一些东西 gui.UpdateLotsOfGuiComponents();

0 个答案:

没有答案