1

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

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

我是否可以只获得一个锁,而不是用InvokeIfRequired人们似乎建议的数百个这样的条件和 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
    }
}

我希望只是在我的电话周围加上一些东西 gui.UpdateLotsOfGuiComponents();

4

0 回答 0