C#只读数据来源时的串口

我想读取我的串口,但只有在数据到来时(我不想轮询)。

我就是这样做的。

Schnittstelle = new SerialPort("COM3"); Schnittstelle.BaudRate = 115200; Schnittstelle.DataBits = 8; Schnittstelle.StopBits = StopBits.Two; .... 

然后我开始一个线程

  beginn = new Thread(readCom); beginn.Start(); 

在我的readCom我正在连续阅读(民意调查:()

 private void readCom() { try { while (Schnittstelle.IsOpen) { Dispatcher.BeginInvoke(new Action(() => { ComWindow.txtbCom.Text = ComWindow.txtbCom.Text + Environment.NewLine + Schnittstelle.ReadExisting(); ComWindow.txtbCom.ScrollToEnd(); })); beginn.Join(10); } } catch (ThreadAbortException) { } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 

我希望你在中断即将到来时阅读。 但是我该怎么做呢?

您必须向DataReceived事件添加eventHandler。

以下是msdn.microsoft.com上的一个示例,其中包含一些编辑内容: 请参阅注释 !:

 public static void Main() { SerialPort mySerialPort = new SerialPort("COM1"); mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); mySerialPort.Open(); Console.WriteLine("Press any key to continue..."); Console.WriteLine(); Console.ReadKey(); mySerialPort.Close(); } private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sp = (SerialPort)sender; string indata = sp.ReadExisting(); Debug.Print("Data Received:"); Debug.Print(indata); } 

每次数据进入时,DataReceivedHandler都会触发并将数据打印到控制台。 我认为您应该能够在代码中执行此操作。

您需要在打开端口之前订阅DataReceived事件,然后在触发时监听该事件。

  private void OpenSerialPort() { try { m_serialPort.DataReceived += SerialPortDataReceived; m_serialPort.Open(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message + ex.StackTrace); } } private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e) { var serialPort = (SerialPort)sender; var data = serialPort.ReadExisting(); ProcessData(data); } 

串行,当缓冲区中有数据时,触发数据接收事件,这并不意味着您一次获得所有数据。 您可能需要等待多次才能获得所有数据; 在您进行最终处理之前,您需要将接收到的数据分开处理,或者将它们保存在某处。