c#NetworkStream write()和read()

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

您可以按照MSDN文档中的文档中的说明同时发出readwrite

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

您将需要使用非阻塞读取操作,如下所述: http : //msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.beginread.aspx

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

NetworkStream类提供了在阻塞模式下通过Stream套接字发送和接收数据的方法。 有关阻塞与非阻塞套接字的更多信息,请参阅使用异步客户端套接字