最後のセクションを見てください:バックグラウンドスレッドからUIスレッドを起動する必要があります。私はWinFormとWPFの両方の例を挙げました。HamunSunga、ごめんなさい。私の主な推奨はあなたが名前を付けることができる専用スレッドを使うことです(オプション2)。このようにして、あなたが誤った振る舞いをした場合、あなたが誤ってあなたの接続を制御するために誤って複数のスレッドを始めたかどうかを簡単に検出することができます。BroadcastTheConnection()コードが長期実行されていることと関係があります。同時にこれらの現象が複数発生している場合は、それを特定する方が簡単です。私はこれに専用のスレッドを提唱します。Thread.Start()メソッドをオーバーロードすることをお勧めします。匿名メソッドを使用することもできます。引き続きチャットでチャットしましょう。KfirGuy、スレッドタスクがなくなるまでに何回できますか。同じTCPコードを同時に実行しているかどうかを確認する方法はありますか。Threadのようなクラスを拡張してはいけませんし、それはシールされたクラスなのでできません。源BroadcastConnectionメソッドはループを使用してすべての接続を管理するため、1回だけ実行する必要があります。源asyncとawaitは、長時間実行されているタスクでもうまく機能します。UIはブロックされません。非同期を使用して待機しないのはなぜですか。それはずっと簡単です。私の答えを確認してください。源どうもありがとうございます。非同期バリアントがあります。これは非同期で接続を待ち、接続された新しいソケットに対して新しいスレッドを開始します。呼び出しに使用できます。UIの更新を許可します。}}このソリューションは、コード構造に比較的変更を加えることでUIをレスポンシブにします。使用するという全体的な戦略を再考することをお勧めします。あなたのUIスレッドでTCP接続を聴くのは、一般的には良い考えではありません。リスニングを行う専用のクラスを別のスレッドで作成し、それをUIコードからアクセスします。よって使用される匿名デリゲート内のものは何も処理されないことにも注意してください。私はまた、サーバーがもう稼働していないときにlistenを停止するためのコードを追加しました。例外をスローするため、これはおそらく必要ありません。それは追加の保護手段としても役立ちます。}}これは最も簡単な例ですので、必要に応じて変更してください。使用することをお勧めします。コンストラクタでより明確にするためには、これを呼び出します。コンストラクタに渡します。メソッドを使うことができます。m.rogalski源AsyncとAwaitを使用して以下の変更を行います。M.Kumaran源だから割り当ては間違っています。C#では、非同期プログラミングを行う正しい方法は、asyncとawaitを使用することです。私の答えをチェックして、スレッドやタスクを使うよりもどれほど簡単かを確認してください。asyncを使って待つだけです。源C#で非同期ネットワークを実現するには、非同期と待機を使用できます。Guy源eventはvoidの戻り値の型なので、Async-Awaitが最も推奨される選択肢ですが、問題はありますが、AsyncメソッドもTaskではなくvoidの戻り値になります。Asyncメソッド内でUiコントロールを更新して別のスレッドを起動しても、うまく動作しません。源バックグラウンドワーカーも使用できます。以下は同じの小さな例です。