我想知道如何阻止Networkstream.Read()
阻止线程。我有单独的线程,其中NetworkStream.Read()
正在等待来自服务器的数据。假设用户按下一些向服务器发送一些数据的按钮。但是,在其他线程中有NetworkStream.Write()
等待数据时,我无法调用NetworkStream.Read()
。我每次都可以锁定NetworkStream
但NetworkStream.Read()
会阻塞线程,所以在读取至少1个字节之前我不能发送数据。
答案 0 :(得分:7)
您可以按照MSDN docs
中的文档中的说明同时发布read
和write
可以在NetworkStream类的实例上同时执行读写操作,而无需同步。只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读写线程之间就不会存在交叉干扰,也不需要同步。
答案 1 :(得分:2)
您需要使用非阻塞读取操作,如:http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspx
所述答案 2 :(得分:2)
您可以在某些时间段内查询NetworkStream.DataAvailable属性,如果为true则可以读取。 “如果DataAvailable为true,则立即调用Read返回。”所以你不会阻止流。
答案 3 :(得分:0)
NetworkStream类提供了在阻塞模式下通过Stream套接字发送和接收数据的方法。有关阻止套接字与非阻塞套接字的详细信息,请参阅Using an Asynchronous Client Socket