参考:
https://blog.csdn.net/ynigeng/article/details/5773418
https://www.cnblogs.com/765boy/p/9009968.html
原因:数据丢失的原因在于数据接收与数据处理同在一个线程中,如果数据处理时间较长,来不及接收的数据只能暂存于缓存中。一旦缓存满了,新到的数据就会冲刷掉未来的及接收的数据,从而造成数据的丢失。此时如果只单单增加缓存的容量是不能根本解决问题的。这也是我们在实际应用中遇到的问题。
解决:数据接收与数据处理分别在两个线程中进行,数据接收线程负责数据接收并将接收的数据存入数据池中;数据处理线程负责从数据池中读取数据和处理数据
Thread trdRead = new Thread(SerialPortRead);
trdRead.Start();
Thread trdDataAnalysis = new Thread(DataAnalysis);
trdDataAnalysis.Start();