C# 用C语言实现串行通信#

C# 用C语言实现串行通信#,c#,serial-port,buffer,serial-communication,C#,Serial Port,Buffer,Serial Communication,在从串行端口读取数据时,我正在使用 serialport.read(xyz,0,4) 其中xyz是字节数组 问题1:执行此操作时,我读取的数据是否会从串行端口的缓冲区中删除?或者是否存在递增的指针 问题2: private void moduleSerialPort_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e) { . . . } 如果在执行之前数据的代码时接收到新数据,是否会触发接收数据事件

在从串行端口读取数据时,我正在使用 serialport.read(xyz,0,4) 其中xyz是字节数组

问题1:执行此操作时,我读取的数据是否会从串行端口的缓冲区中删除?或者是否存在递增的指针

问题2:

private void moduleSerialPort_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
.
.
.
}
如果在执行之前数据的代码时接收到新数据,是否会触发接收数据事件

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


谁能帮帮我吗。 谢谢你的帮助。
谢谢

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

我认为这将解决您的问题


遵循以下代码示例


问候。

“有人能帮我吗?”你的问题是什么?您没有提供任何代码。这应该是两个独立的问题,它们都应该有相应的代码。串行通信有一个缓冲区,你读4个字节,这4个字节被发送给你。谢谢,我得到了我问题的答案。我现在唯一想要的是:在接收到数据的事件中,我想读取字节,直到缓冲区变空。我无法在这里粘贴代码。。我会尽量给出网址的。thanks@Akshay:查看
BytesToRead
属性,它告诉您缓冲区中有多少字节。