【问题标题】:How to check the data received event in serial port C#如何检查串口C#中的数据接收事件
【发布时间】:2013-12-20 13:19:54
【问题描述】:

我正在尝试使用串口读取/写入一些数据,

byte[] txTestData = new byte[] { 0x03, 0x0, 0x01, 0x0};
Serial.Write(txTestData, 0, txTestData.Length);

但我只想在从串口接收数据时读取数据。 ,即

if(Data received from serial port)
{
   byte[] rxTestResponse = new byte[2];
   Serial.Read(rxTestResponse, 0, 2);
}

是否有任何 API 可以告诉我收到数据的事件??

谢谢, 达塔塔利亚

【问题讨论】:

  • 可以使用DataReceived事件,当串口接收到一些数据时会触发该事件。
  • @Datta 我的回答有用吗?您需要任何帮助吗?

标签: c# serial-port


【解决方案1】:

是的,有一个 API 可以告诉您何时收到数据,它称为事件。阅读更多关于活动的信息here

附加事件:

mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

创建处理程序

private static void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
     byte[] rxTestResponse = new byte[2];
     Serial.Read(rxTestResponse, 0, 2);
}

每次 SerialPort 接收数据时,它都会调用 DataReceived 事件并执行您的事件处理程序

【讨论】:

  • 问题在于,在您需要再次检查的事件将调用的委托中,数据是否真的来了。这里有办法吗?
  • @Hi-Angel 仅当客户端收到数据时才会引发此事件。
  • 我知道。假设这个事件调用了获取锁的函数,并将一些变量«PortHasData»设置为true。稍后在 «ReadMyData()» 中,我设置了锁定,接下来读取数据并将 «PortHasData» 设置为 false。 Achtung:就在«ReadMyData()» 获得锁定和读取数据之间的间隙,DataReceived 可以被触发,并且委托将被锁定。在它发布后,它将 «PortHasData» 设置为 true - 但端口不再有数据!所以在委托函数中我需要再次检查端口是否真的有数据。
猜你喜欢
  • 2018-04-17
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2015-08-04
  • 2021-12-27
相关资源
最近更新 更多