c# - .Net SerialPort 在字节可用时占用 0.5 秒来读取字节

标签 c# serial-port

我在 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 秒才能读取第一个字节。

我实际上已经尝试将 Port 的 ReadTimeout 属性设置为更小的值以防止它无限期地坐在那里,但这个属性似乎被忽略了。

非常感谢任何帮助。

最佳答案

事实证明,运行连接到调试器是导致问题的原因。在调试器外部运行时记录的读取一个字节的最长时间约为 20 毫秒,而在调试器内部运行时最长为 700 毫秒(无断点、有条件或以其他方式启用)。

有点转移注意力,因为运行发布版本时通信问题的真正原因可能在别处。

关于c# - .Net SerialPort 在字节可用时占用 0.5 秒来读取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13031372/

相关文章:

c# - 如何在现有 PDF 中使用 iTextSharp 插入指向另一个页面的超链接?

c# - 是否有更好的方法在 CLR 中验证 SqlXml?

C# Google Chrome Selenium URL 导航与 BinaryLocation

Python串行在shell中工作但在脚本中不起作用?

linux - 连续 UART 传输之间的随机暂停

c - 无法从串口获取数据结构

c++ - 微:Bit Serial read

c# - #if 除 DEBUG 之外的指令的预处理器指令

c# - NHibernate 获得第一个 x 个不同的结果没有获得我的 x 个结果?

c - 从 RFID 读取器获取数据