我正在使用如下代码读取发送到串行端口(即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 事件?
我发现dataReceiave
事件可能会频繁触发,并且在事件中运行代码时确实会阻止SerialPort
。你说你可能想要这个功能,但这里有更多可能有用或可能不有用的信息。
我使用定时器
,通常在10
如果您循环
直到BytesToread==0
,则将每一行读入缓冲区以供以后处理或在读取后直接处理。
如果您知道Arduino构造一行文本需要多长时间,并且如果在ReadTimeout
中仅接收到一行的一部分,则示例中的Read Timeout
属性非常有用。