当可用字节时,.Net SerialPort需要0.5秒以上的时间来读取字节

时间:2012-10-23 13:20:30

标签: 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属性设置为更小的值以防止它无限期地坐在那里,但是这个属性似乎被忽略了。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

原来连接到Debugger的运行导致了问题。在调试器外部运行,读取一个字节所记录的最大时间约为20ms,而在内部运行时则不超过700ms(没有断点,有条件或以其他方式启用)。

有点红鲱鱼,因为运行发布版本时可能会出现通信问题的真正原因可能在其他地方。