C#如何保证多线程情况下serialport仍然接收正常不丢数据?
C#如何保证多线程情况下serialport仍然接收正常不丢数据?我使用一个线程1使用serialport用于实时接收下位机的数据,并处理。然后再新建一个线程2用于运行一...
C#如何保证多线程情况下serialport仍然接收正常不丢数据?我使用一个线程1使用serialport用于实时接收下位机的数据,并处理。然后再新建一个线程2用于运行一个逻辑程序,并不时地启动一个timer。这样的两个线程并行的时候,发现线程1的serialport接收数据出现了不定时的丢失数据的情况,在不启动线程2的情况下,没发现接收丢失数据,请问改怎么改善这种情况呢?
展开
展开全部
用RecieveBytesThreshold=47是不靠谱的,实际调试时你会发现有时候缓冲区不到47字节就触发中断,所以一定要把RecieveBytesThreshold设为默认的1。即使你把他设成1,也会发现触发中断时缓冲区里面字节数还是可能大于1,不过这样能确保数据接收完整(47个你全部能收到)。
数据接收与处理逻辑要在RecieveBytesThreshold=1的基础上来建立,比如你可以在每次接收中断中把缓冲区的字节以续接的方式存在一个暂存数组里,等到拼满47个,就统一做一次处理。
数据接收与处理逻辑要在RecieveBytesThreshold=1的基础上来建立,比如你可以在每次接收中断中把缓冲区的字节以续接的方式存在一个暂存数组里,等到拼满47个,就统一做一次处理。
追问
能不能稍微切题一点可以吗?
说的啥?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询