我正在使用类似于以下代码的方式阅读通过串行端口(即COM3)发送的数据:
_serialPort.PortName = "COM3";
_serialPort.BaudRate = 9600;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
_serialPort.Open();
从串口传来的数据是命令,可以是以 '\0' 结尾的任意长度字符串。我正在寻找如何有效读取这些数据的最佳实践方法。我认为生产者/消费者模式可能是最好的选择,其中:
- 每次 DataReceived 事件触发时,我从端口读取字符串并将其附加到一个字符串缓冲区或其他结构中
- 然后我有另一个线程不断检查字符串缓冲区或结构中的 char '\0',如果找到,则解析并删除命令字符串。
这是处理此类数据的最有效方法吗?是否有任何不依赖于 DataReceived 事件的阻塞串行读取函数?