例如,您能否尝试这样的事情,我想您想利用的是 port.ReadExisting() 方法
using System; using System.IO.Ports; class SerialPortProgram { // Create the serial port with basic settings private SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); [STAThread] static void Main(string[] args) { // Instatiate this SerialPortProgram(); } private static void SerialPortProgram() { Console.WriteLine("Incoming data:"); // Attach a method to be called when there // is data waiting in the port's buffer port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); // Begin communications port.Open(); // Enter an application loop to keep this thread alive Console.ReadLine(); } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { // Show all the incoming data in the port's buffer Console.WriteLine(port.ReadExisting()); } }还是您想根据自己想做的事来做,可以尝试一下
public class MySerialReader : IDisposable{ private SerialPort serialPort; private Queue<byte> recievedData = new Queue<byte>(); public MySerialReader() { serialPort = new SerialPort(); serialPort.Open(); serialPort.DataReceived += serialPort_DataReceived; } void serialPort_DataReceived(object s, SerialDataReceivedEventArgs e) { byte[] data = new byte[serialPort.BytesToRead]; serialPort.Read(data, 0, data.Length); data.ToList().ForEach(b => recievedData.Enqueue(b)); processData(); } void processData() { // Determine if we have a "packet" in the queue if (recievedData.Count > 50) { var packet = Enumerable.Range(0, 50).Select(i => recievedData.Dequeue()); } } public void Dispose() { if (serialPort != null) { serialPort.Dispose(); } }


