C# SerialPort应该怎么使用DiscardinBuffer方法?
我在尝试使用C#SerialPort做一个串口通信的上位机程序,接收数据然后显示,波特率为115200。我在DataReceived事件中接收、校验数据并解码,但是发现界...
我在尝试使用C# SerialPort做一个串口通信的上位机程序,接收数据然后显示,波特率为115200。我在DataReceived事件中接收、校验数据并解码,但是发现界面数据的更新延迟很大,下位机的状态明显发生改变了,程序显示的数据往往要等十几秒。我尝试在DataReceived最后添加SerialPort1.DiscardinBuffer();,数据显示就变得及时了。
但是我觉得清空缓存不是合适的办法,毕竟会丢失一些数据。请问串口通信的老手我这样的处理方式合适吗?或者有什么方法能提高数据接收和显示的效率? 展开
但是我觉得清空缓存不是合适的办法,毕竟会丢失一些数据。请问串口通信的老手我这样的处理方式合适吗?或者有什么方法能提高数据接收和显示的效率? 展开
2015-08-02
展开全部
没有特别原因,不要清除buffer。
感觉你的DataReceived好像有问题。是不是处理时间太长了啊。
感觉你的DataReceived好像有问题。是不是处理时间太长了啊。
追问
那把数据的校验和解码放到另一个线程进行可行吗?代码大概该怎么写可以指点一下吗?我没用过C#。
追答
其实串口的通讯速率已经挺低的了。通常运算量不大的话,基本上没问题。
关键是你的处理代码是否比较烂,如果太慢了,跟不上通讯速率,必然会导致画面卡住,并且影响到下次通信。
如果真的运算量大,可以考虑使用BackgroundWorker类来替你在背景线程里处理。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询