如何检查我是否有内容要在StreamReader上阅读
本文关键字:StreamReader 何检查 检查 是否 | 更新日期: 2023-09-27 18:28:13
我需要检查我的客户端缓冲区中是否有东西,所以我没有等待编写它。
private async void ThreadMethod_ListenClient()
{
while (true) {
if (ClientQueue.Count == 0)
continue;
Client client = (Client)ClientQueue.Dequeue ();
if (client.Reader != null) {
string Say = await client.Reader.ReadLineAsync();
if (Say != null) {
if (Say.Length != 0) {
Console.WriteLine (Say);
}
}
}
ClientQueue.Enqueue (client);
}
}
客户。读取器:来自 TcpClient 的流读取器
客户。套接字 : Tcp客户端
如何检查是否"客户端。读者是空的?
C# with Mono
还StreamReader.Peek()
,当到达文件末尾或没有要读取的内容时返回-1
。可以按如下方式检查:
while(StreamReader.Peek() != -1){
//Your code here
}
如何检查我是否有内容要在流阅读器上阅读?
我不知道StreamReader
,但对于TcpClient
您可以使用TcpClient.GetStream()
返回NetworkStream
而该方法又具有 DataAvailable 属性。这在TcpClient.GetStream
文档的"备注"部分中进行了说明:
可以通过检查 DataAvailable 属性来避免阻止读取操作。
编辑:我已经发布了这个,因为你的代码正在运行一个特定的域。虽然其他答案/评论中描述的一般方法适用于正常的有限流(如FileStream
、MemoryStream
等(,但它不适用于像NetworkStream
这样的无限流。
StreamReader.ReadLine()
方法返回null
如果流的末尾已到达或没有剩余的内容要读取。因此,您可以检查它以验证是否有要阅读的内容。
if (client.Reader != null && client.Reader.ReadLine() != null)