各位高手,给帮看看本人这个是为什么:
本人用C#去读串口,每秒钟读一次,速率9600,每次读88个字节。
程序开始的20几分钟一切正常,30分钟以后开始各种出问题,例如丢字节啥的,每次的88个总凑不够数。
不清楚这是为什么?开始的20几分钟能正常运行,说明程序的基本逻辑和语句都是对的吧,后面怎么出错了呢?
====================
百度了一下,有人说是不能在读串口的线程里对读到的数据处理,本人读到串口数据以后,下面的数据处理语句还挺多的,估计有几百行,不知道能否跟这个有关?
本人用C#去读串口,每秒钟读一次,速率9600,每次读88个字节。
程序开始的20几分钟一切正常,30分钟以后开始各种出问题,例如丢字节啥的,每次的88个总凑不够数。
不清楚这是为什么?开始的20几分钟能正常运行,说明程序的基本逻辑和语句都是对的吧,后面怎么出错了呢?
====================
百度了一下,有人说是不能在读串口的线程里对读到的数据处理,本人读到串口数据以后,下面的数据处理语句还挺多的,估计有几百行,不知道能否跟这个有关?
解决方案
10
假如处理数据的代码比较复杂,建议另开线程处理,这样就不会影响到串口的线程了
10
读取数据和处理数据分开来弄吧,感觉可能是你处理数据里面用来保存数据的数组或集合越来越大的缘故。
另外你没贴代码,总不能靠猜测去推断问题吧。
另外你没贴代码,总不能靠猜测去推断问题吧。
20
无论你定时轮询还是通过串口组件的事件来接受数据,较安全的方法是将每次读取的数据放入一个缓冲区,然后另外开一个线程去处理该缓冲区中的数据(注意同步),原因是系统并不保证每次有数据到达时串口接受缓冲区内是包含了整个包的数据,可能是分两次或三次才接受完毕。假如你的通讯协议每个包都是88字节可以通过设置ReceivedBytesThreshold = 88来实现。