何时决定从串行端口设备读取StreamReader中的下一个字符以避免获取时间错误(C#)

何时决定从串行端口设备读取StreamReader中的下一个字符以避免获取时间错误(C#),c#,serial-port,streamreader,C#,Serial Port,Streamreader,我向串行端口中的设备发送重置连接命令。对此,我有时(大多数时候)会得到一个单字的答案。所以我使用reader.readcomment在使用streamwriter编写第一个命令之后。但有时我们的设备不会对第一个请求发送响应。这对我来说无关紧要,因为我不在我的软件中使用响应。我将继续向设备发送下一个命令。当设备不发送响应时,我的reader.Read调用会出现超时异常,我无法继续与设备通信。因为我不知道设备何时会响应请求,我能做什么?我要么看不懂第一个答案。但在这种情况下,一个字符破坏了设备将发送

我向串行端口中的设备发送重置连接命令。对此,我有时(大多数时候)会得到一个单字的答案。所以我使用reader.readcomment在使用streamwriter编写第一个命令之后。但有时我们的设备不会对第一个请求发送响应。这对我来说无关紧要,因为我不在我的软件中使用响应。我将继续向设备发送下一个命令。当设备不发送响应时,我的reader.Read调用会出现超时异常,我无法继续与设备通信。因为我不知道设备何时会响应请求,我能做什么?我要么看不懂第一个答案。但在这种情况下,一个字符破坏了设备将发送给我的以下消息。它将出现在消息的开头。如果我使用reader.read,我可以得到超时异常。 我试过了

if (reader.Peek() >= 0)
   reader.Read();
但这对我没有帮助。time Peek()方法可以获取超时异常。 如何知道是否有适合我的字符,或者是否必须跳过阅读并继续编写下一个命令

谢谢你的回答,
Ferda Ozdemir

可能只是捕获异常,然后通过将数据包发送到设备进行响应来再次迭代。大多数设备驱动程序都是这样做的。您可能会限制重试次数。

如果您有一个响应SerialPort.DataReceived事件的方法,您可以在其中尝试以下操作:

while (port.BytesToRead > 0)
{
    reader.Read(); //Or reader.ReadLine(); 
}

有关DataReceived事件的更多信息:

有时设备没有连接到串行端口,而是通过ETH调制解调器或gprs调制解调器连接到串行端口,因此我在这种情况下使用TCPclient。我检查了没有像BytesToRead这样的tcpclient方法。但是你的建议对我的串口连接很有帮助。非常感谢。