2011-07-27 22 views
5

Networkstream.Read()スレッドをブロックする方法を止めたいと思います。 NetworkStream.Read()がサーバーからのデータを待っている別のスレッドがあります。ユーザーが何らかのデータをサーバーに送信するボタンを押すと仮定します。しかし、NetworkStream.Write()に電話することはできませんが、データを待っている他のスレッドにはNetworkStream.Read()があります。私は毎回NetworkStreamをロックすることができますが、NetworkStream.Read()はスレッドをブロックしますので、少なくとも1バイト読み込むまでデータを送信することはできません。c#NetworkStream write()とread()

答えて

0

NetworkStreamクラスは、ブロックモードでストリームソケットを介してデータを送受信するための方法を提供します。ノンブロッキングソケットに対してブロックの詳細については、Using an Asynchronous Client Socket

7

あなたはNetworkStreamのインスタンス上で同時に行うことができるMSDN docs

読むのドキュメントに記載されているように同時に両方readwriteを発行し、操作を書くことができます見ます同期の必要なしにクラスを作成できます。書き込み操作のための1つのユニークなスレッドと読み取り操作のための1つのユニークなスレッドが存在する限り、読み取りスレッドと書き込みスレッドの間に相互干渉はなく、同期は必要ありません。

2

NetworkStream.DataAvailableプロパティは、ある期間で照会して、それが真である場合にのみ読み取ることができます。 "DataAvailableがtrueの場合、Read呼び出しはすぐに戻ります。"だからストリームをブロックしません。

関連する問題