C# 在调用表单之前,是否可以在整个表单上使用invokeFrequered';什么方法?

C# 在调用表单之前,是否可以在整个表单上使用invokeFrequered';什么方法?,c#,multithreading,winforms,user-interface,invokerequired,C#,Multithreading,Winforms,User Interface,Invokerequired,在Winforms中, 我有一个非GUI线程正在侦听传入的UDP消息。 当它收到消息时,它通过调用表单的一个方法来更新表单上的各种UI组件 这显然是一种竞赛条件。 似乎我想在每个组件上使用某种invokeIfrequered模式 我可以只得到一个锁,而不是像人们所建议的那样,用成百上千的invokeFrequered条件和lambda来编写代码吗?我是否可以围绕对表单的单个调用引入线程安全调整,而不必修改表单代码的内部结构 我的运行线程如下所示: private static void Hand

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

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

我可以只得到一个锁,而不是像人们所建议的那样,用成百上千的
invokeFrequered
条件和lambda来编写代码吗?我是否可以围绕对表单的单个调用引入线程安全调整,而不必修改表单代码的内部结构

我的运行线程如下所示:

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
    }
}
表格看起来像这样:

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()

是的,一旦您对表单调用了(),您就可以在该调用中更新任意数量的控件。您是否可以指向建议“如果(invokererequired)调用时乱扔数百个”的文章/帖子?到目前为止,我还没有看到任何类似的东西(即,或MSDN的)-我看到的所有来源都说您需要更新UI线程上的控件,要做到这一点,您应该检查InvokeRequired(它搜索到父窗体),没有要求每个控件都单独更新。