在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();
。