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

本文关键字:Timeour 错误 字符 下一个 串行端口 决定 读取 StreamReader 何时 | 更新日期: 2023-09-27 18:05:37

我发送一个复位连接命令到串行端口的设备。作为回应,我有时(大多数时候)得到一个字符的答案。所以我用reader。在使用流写入器编写第一个命令后读取注释。但有时我们的设备不会对第一个请求发送响应。这对我来说并不重要,因为我没有在我的软件中使用响应。我将继续向设备发送下一个命令。当设备没有发送响应时,我的阅读器。读取调用得到一个超时异常,我不能继续与设备通信。因为我不知道什么时候设备会回答请求或不我能做什么?我要么不看第一个答案。但在这种情况下,一个字符破坏了设备将发送给我的以下消息。它将在消息的开头。如果我使用reader。读我可以得到超时异常。I tried

if (reader.Peek() >= 0)
   reader.Read();

但它没有帮助我。这时Peek()方法会得到超时异常。我怎么知道是否有适合我的字符,或者如果我必须跳过阅读并继续编写下一个命令??

谢谢你的回答,Ferda奥兹德米尔

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

可能只是捕获异常并通过将数据包发送到设备以获得响应来再次迭代。这是大多数设备驱动程序所做的。可能是您限制了重试的次数

如果你有一个响应SerialPort的方法。DataReceived事件,您可以在其中尝试这样做:

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

DataReceived事件的进一步信息:MSDN on DataReceived