我正在使用 C# 中的 .Net SerialPort 类从端口读取字节。收到 DataReceived 事件后,我检查串行端口以查看是否有字节可供读取。然而,即使字节可用,端口也可能需要半秒以上的时间来读取单个字节。代码大致如下:
...
while(Port.BytesToRead > 0)
{
StopWatch.Restart();
Int32 BytesRead = Port.Read(Read, 0, 1);
StopWatch.Stop();
if (StopWatch.ElapsedMilliseconds > 100)
{
// Record the time. The stopwatch code
// was only added after performance issues were observed.
}
}
请注意,我测量的时间不是读取所有字节的时间,而是读取单个字节的时间。我经常会收到 DataReceived 事件,并且必须等待 0.5 秒才能读取第一个字节。
我实际上尝试将端口的 ReadTimeout 属性设置为较小的值,以防止它无限期地停留在那里,但该属性似乎被忽略。
非常感谢任何帮助。
事实证明,连接到调试器的运行导致了问题。在调试器外部运行时,记录的读取一个字节的最大时间约为 20 毫秒,而在调试器内运行时则长达 700 毫秒(无断点、条件或以其他方式启用)。
有点转移注意力,因为运行发布版本时出现通信问题的真正原因可能在其他地方。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)