在C#中我们通常使用SerialPort类来对串口进行操作,正常情况下我们只需要将自己的代码写到串口的接收事件中就行,但当串口接收的数据量大的时候有可能出现数据丢失的问题。如果在接收时出现数据丢失的情况,我们可以在接收事件中添加一段延时语句,让程序在收到数据后等一等就可以解决这个问题。
这里贴上对应的代码,其中PortGet方法是串口接收到数据后会执行的方法,我们在这里面加上一句Thread.Sleep(10)就可以有效防止接收到的数据的丢失。
class Program
{
static SerialPort serialPort;
static void Main(string[] args)
{
serialPort = new SerialPort("COM1"); // 端口
serialPort.BaudRate = 9600; // 波特率
serialPort.Parity = Parity.None; // 校验位
serialPort.StopBits = StopBits.One; // 停止位
serialPort.DataBits = 8; // 数据位
serialPort.ReadTimeout = 1500;
serialPort.DtrEnable = true;
serialPort.Encoding = Encoding.UTF8;
serialPort.ReceivedBytesThreshold = 1;
serialPort.Open();
serialPort.DataReceived += new SerialDataReceivedEventHandler(PortGet);
Console.ReadKey();
}
static void PortGet(object sender, SerialDataReceivedEventArgs e)
{
int Readlen = serialPort.BytesToWrite; // 获取接收缓冲区长度
byte[] by = new byte[Readlen]; // 新建一个byte[]数组 用来存放接收的数据
serialPort.Read(by, 0, Readlen); // 接收数据到by数组里
Console.WriteLine(serialPort.ReadExisting()); // 输出
Thread.Sleep(10); // 延时,防止数据丢失
}
}