C# 串口接收时丢失数据的解决办法
在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); // 延时,防止数据丢失 } }