c#NetworkStream write()和read()

时间:2011-07-27 10:48:16

标签: c# tcpclient networkstream

我想知道如何阻止Networkstream.Read()阻止线程。我有单独的线程,其中NetworkStream.Read()正在等待来自服务器的数据。假设用户按下一些向服务器发送一些数据的按钮。但是,在其他线程中有NetworkStream.Write()等待数据时,我无法调用NetworkStream.Read()。我每次都可以锁定NetworkStreamNetworkStream.Read()会阻塞线程,所以在读取至少1个字节之前我不能发送数据。

4 个答案:

答案 0 :(得分:7)

您可以按照MSDN docs

中的文档中的说明同时发布readwrite
  

可以在NetworkStream类的实例上同时执行读写操作,而无需同步。只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读写线程之间就不会存在交叉干扰,也不需要同步。

答案 1 :(得分:2)

答案 2 :(得分:2)

您可以在某些时间段内查询NetworkStream.DataAvailable属性,如果为true则可以读取。 “如果DataAvailable为true,则立即调用Read返回。”所以你不会阻止流。

答案 3 :(得分:0)

NetworkStream类提供了在阻塞模式下通过Stream套接字发送和接收数据的方法。有关阻止套接字与非阻塞套接字的详细信息,请参阅Using an Asynchronous Client Socket