これは私の質問とは関係ありませんが、サードパーティのソケット ライブラリを使用しています。ライブラリは、「ConnectAsync」や「WriteAsync」などのメソッドを持つ「Socket」クラスで構成されています。これらのメソッドの 1 つを呼び出すとすぐに制御が戻り、ソケット クラスは、"ConnectCompleted" や "WriteCompleted" などの操作が完了したときに通知するイベントを発生させます。このクラスは、データが受信されたときに「PacketArrived」というイベントも発生させます。
私のアプリでは、データを送信して返信を待ちたいと思っています。これは多くの場所で発生する可能性があるため、上記のソケット クラスを何らかのヘルパーでラップして、これらすべてを実行することは理にかなっています。また、非同期にしたいので、接続/書き込み/応答の待機中に UI (WPF) がフリーズしないため、ヘルパー メソッドの呼び出しは次のようになります。
SocketHelper.SendData(dataToSend, myCallback);
データが受信されたときに「myCallback」が呼び出される場所。
スレッド化に慣れていないので、このヘルパーの書き方がわかりません - どういうわけか、さまざまなメソッドとイベントをつなぎ合わせる必要があります。つまり、接続を開き、接続が完了するのを待ち、データを書き込み、への書き込みを待ちます。完了したら、データ パケットが到着するのを待ちます (その後、提供されたコールバックを呼び出します)。どんな助けでも感謝します。