我需要收到NewLine上的SerialPort事件

Kam*_*mil 0 .net c# serial-port

我需要事件,它将在收到完整行后调用我的函数,而不仅仅是一个字节.

.NET中的SerialPort对象有3个事件:DataReceived,ErrorReceived,PinChanged.

当我使用DataReceived时 - 事件在1个字节之后"触发",或者在"ReceiveByteThreshold"属性中定义的"x"字节之后.线长可能会有所不同,所以我无法预测"x".

有人能给我一个暗示吗?

我必须创建一些缓冲区,它将收集字节直到LF/CRLF,或者有更好的方法解决问题?

Han*_*ant 6

你不能得到这个,唯一的选择是SerialPort.ReceivedBytesThreshold来延迟DataReceived事件处理程序调用,这对于可变长度响应是无用的.

解决方法非常简单,只需在DataReceived事件处理程序中调用ReadLine()即可.这将阻止工作线程,不会影响程序中发生的任何其他事情.在ReadLine()调用阻塞时触发其他事件没有危险,它在SerialPort类中是互锁的.如果通信不够可靠,请使用ReadTimeout属性,以便ReadLine()不会永久阻塞.将其设置为接收最长可能响应的预期延迟的十倍.