}複数のクライアントを接続しようとすると、このコードは完璧に機能します。接続をブロードキャストした後にフォームを移動しようとすると、うまくいきません。作ることを考えるべきです。その後、通信スレッドからUIスレッドにデータを転送したい場合は、同期コンテキストを使用する必要があります。気にしないのであれば、例を教えてください。BroadcastTheConnection()がUIスレッド自体から呼び出されていることです。falseになるまで、UIスレッドはコード上で回転します。同じ修正を実装するには、いくつかの方法があります。サーバースレッドをUIスレッドから取得する。それぞれにトレードオフがあります。BroadcastTheConnection()を使用する(お勧めしません)BroadcastTheConnection()がメインメソッドであるスレッドを立ち上げます。非同期ソケット呼び出しを使用します。TaskCreationOptions.LongRunning);これは迅速で簡単ですが、タスクスレッドプール内のスレッドを長時間占有する可能性があるため、あまりにも多くの長時間実行されるタスクは望ましくありません。true};connectionThread.Start();これはタスクthreadpoolからのスレッドを一切使用せず、デバッグに役立つ名前の付いたスレッドを提供し、あなたがそれを終了するのを忘れた場合スレッドがあなたのアプリケーションを実行し続けることを妨げます。ソケットコードからUIを操作する何らかの方法でUIと対話する必要があるときはいつでも、呼び出しを再びUIスレッドに入れる必要があります。WinFormsとWPFでは、同じことをやる方法が少し異なります。連続して呼び出す回数が多すぎると、UIスレッドが過負荷になる可能性があります。大量のリクエストを連続して実行するよりも、それらをまとめたほうが良いでしょう。Invokeを使用することは、歴史に遡ります。この場合は、Async-Awaitが最も簡単な解決策です。UIスレッドがコードを実行するまでブロックするので、事実上ロックメカニズムです。クラスで定義されています。したがって、どのウィンドウ、ボタン、パネルなどにも、UIスレッドでコードを呼び出すことができる関数があります。使用することで、同じことができます。