3

从串行端口读取时,我使用的是 serialport.read(xyz,0,4) 其中 xyz 是一个字节数组。

问题1:这样做时,我读取的数据是否从串口缓冲区中删除?还是有一个指针会增加?

问题2:

private void moduleSerialPort_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
.
.
.
}

如果在执行之前数据的代码时接收到新数据,是否会触发接收数据事件?

我发现当我的系统运行几个小时时,发生了以下事情:传输新数据时,它是在串行端口上接收到的,但计算机处理了之前发送的数据。所以我怀疑数据是否保留在缓冲区中并在下一个 datareceived 事件中执行。

有人可以帮帮我吗。感谢你的帮助。谢谢

4

3 回答 3

5

数据保留在缓冲区中,直到您读取它。简单地处理一个DataReceived事件不会导致数据出队,您实际上必须阅读它。如果您读取的缓冲区少于整个缓冲区,那么下次DataReceived事件发生时,您将在新数据之前读取旧的剩余部分。

于 2012-06-15T15:08:43.463 回答
0

我认为这会解决你的问题

http://www.fryan0911.com/2009/04/c-serial-port-communication.html

于 2012-06-15T20:28:55.743 回答
0

遵循此代码示例

http://code.msdn.microsoft.com/SerialPort-Windows-Forms-a43f208e

问候。

于 2012-06-15T20:37:16.753 回答