Winforms
には、着信 UDP メッセージをリッスンする非 GUI スレッドがあります。
メッセージを受信すると、フォームのメソッドの 1 つを呼び出して、フォーム上のさまざまな UI コンポーネントを更新します。
これは明らかに競合状態です。すべてのコンポーネントで
何らかのパターンを使用することになっているようです。InvokeIfRequired
InvokeIfRequired人々が提案しているように見える何百ものこれらの条件文とラムダでコードをリテラルする代わりに、単一のロックを取得できますか? フォーム コードの内部を変更する代わりに、フォームへの 1 回の呼び出しにスレッド セーフな調整を導入できますか?
私の実行中のスレッドは次のようになります。
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();。