C#中的串行通信

3

在读取串口数据时,我使用了以下代码:

serialport.read(xyz, 0, 4)

其中xyz是一个字节数组。

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

问题2:

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

如果在执行先前数据的代码时收到新数据,那么数据接收事件是否会被触发? 我发现当我的系统运行几个小时后,以下事情发生: 当新数据被传输时,在串口上接收到了这些数据,但计算机却处理之前发送的数据。因此,我怀疑数据留在缓冲区中,并在下一个数据接收事件上执行。 请问有人可以帮我解决这个问题吗?谢谢!

有人可以帮我吗?你的问题是什么?你没有提供任何代码。这应该是两个单独的问题,它们都应该有相应的代码。串行通信有一个缓冲区,你读取4个字节,这4个字节会被发送给你。 - Security Hound
3个回答

5

数据会一直保存在缓冲区中,直到你读取它。仅处理 DataReceived 事件并不会导致数据出队列,你需要实际上读取它。如果你只读取了部分数据,那么下一次 DataReceived 事件发生时,你将先读取旧数据剩余的部分再读取新数据。


谢谢,我已经得到了我的问题的答案。现在我想要的是:在数据接收事件中,我想读取字节直到缓冲区为空。我无法在这里粘贴代码...也许我会尝试提供URL。谢谢。 - Akshay Kekre
@Akshay:看一下BytesToRead属性,它会告诉你缓冲区中有多少字节。 - Ben Voigt


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接