Networkstream.Read()
スレッドのブロックを停止する方法を知りたいです。NetworkStream.Read()
サーバーからのデータを待っている別のスレッドがあります。ユーザーが何らかのデータをサーバーに送信するボタンを押したとします。しかし、データを待っている他のスレッドにいるNetworkStream.Write()
間は呼び出すことができません。毎回NetworkStream.Read()
ロックできますが、スレッドをブロックするため、少なくとも 1 バイトを読み取るまでデータを送信できません。NetworkStream
NetworkStream.Read()
4 に答える
MSDN docsのドキュメントに記載されているように、両方read
をwrite
同時に発行できます
読み取り操作と書き込み操作は、同期を必要とせずに NetworkStream クラスのインスタンスで同時に実行できます。書き込み操作用に 1 つの固有のスレッドがあり、読み取り操作用に 1 つの固有のスレッドがある限り、読み取りスレッドと書き込みスレッドの間に相互干渉はなく、同期は必要ありません。
http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspxで説明されているように、ノンブロッキング読み取り操作を使用する必要があります。
ある期間に NetworkStream.DataAvailable プロパティをクエリし、true の場合のみ読み取ることができます。「DataAvailable が true の場合、Read の呼び出しはすぐに返されます。」したがって、ストリームをブロックしません。
NetworkStream クラスは、ブロッキング モードで Stream ソケットを介してデータを送受信するためのメソッドを提供します。ブロッキング ソケットと非ブロッキング ソケットの詳細については、「非同期クライアント ソケットの使用」を参照してください。