winform串口缓存问题 求帮助

问题描述

下面是我写的多线程串口收发的程序但是现在用在客户现场经常抱“非窗体线程错误:listByteReceivedlengthisnotenough”帮帮忙,我试了好几种方法都没用publicvoidOpen(intbaudRate,intdataBits,Parityparity,StopBitsstopBits){if(threadRead!=null){threadRead.Abort();}if(systemTimer!=null){systemTimer.Dispose();}if(serialPort!=null){serialPort.Close();serialPort.Dispose();}this.IsOpen=false;this.serialPort=newSerialPort(this.PortName);this.BaudRate=baudRate;this.DataBits=dataBits;this.Parity=parity;this.StopBits=stopBits;try{threadRead=newThread(Read);threadRead.IsBackground=true;threadRead.Start();if(!serialPort.IsOpen){serialPort.Open();}serialPort.DiscardInBuffer();serialPort.DataReceived+=newSerialDataReceivedEventHandler(serialPort_DataReceived);this.IsOpen=true;systemTimer=newSystem.Timers.Timer(500);systemTimer.Elapsed+=newSystem.Timers.ElapsedEventHandler(systemTimer_Elapsed);systemTimer.Start();}catch(Exceptionex){throwex;}}voidserialPort_DataReceived(objectsender,SerialDataReceivedEventArgse){intn=serialPort.BytesToRead;byte[]buffer=newbyte[n];serialPort.Read(buffer,0,n);listByteReceived.AddRange(buffer);serialPort.DiscardInBuffer();}publicvoidWrite(byte[]bytesData){if(IsOpen){try{serialPort.Write(bytesData,0,bytesData.Length);}catch(Exceptionex){throwex;}}else{thrownewApplicationException("SerialPortisClosing!");}}privatevoidRead(){try{while(true){Thread.Sleep(1);lock(locker){if(listByteReceived.Count>0){MissingCount=0;if(!HasConnected){HasConnected=true;}if(listByteReceived[0]==MessageHelper.StringToByte("$")[0]){if(listByteReceived.Count<=4){continue;}Thread.Sleep(5);lock(locker){//报文字节数1字节intdatagramLength=listByteReceived.Skip(3).Take(1).ToArray()[0];//加上两位CRC校验的长度datagramLength+=2;if(listByteReceived.Count>=datagramLength){byte[]bytesDatagram=newbyte[datagramLength];listByteReceived.CopyTo(0,bytesDatagram,0,datagramLength);listByteReceived.RemoveRange(0,datagramLength);Model.IResponseDatagramresp=DatagramFactory.Create(bytesDatagram,this):}else{UserHelper.goyes=0;}}}else{listByteReceived.RemoveAt(0);UserHelper.goyes=0;}}}}}catch(Exceptionex){throwex;}}

解决方案

解决方案二:
通讯程序调试,最直接有效的方式就是逐条打出接收、发送数据,同时输出到文本中靠猜是猜不出来的
解决方案三:
listByteReceivedlengthisnotenough很明显你队列长度不够

时间: 2025-01-30 03:28:29

winform串口缓存问题 求帮助的相关文章

linux串口通信!求大神!急

问题描述 linux串口通信!求大神!急 我现在有一块7444的开发板,想实现7444通过串口传输命令给7444开发板上的另一模块cc2530(zigbee中的协调器),然后发送给给第三方开发板(只要当前cc2530能接收到命令就能直接发送数据到zigbee终端,以实现),然后终端zigbee模块的温度数据回传到7444开发板上的CC2530协调器,再从串扣回传给7445,已知我当前的串口设备文件是tty1,怎么编写C程序读取改开发板上cc2530传来的温度数据,和通过串口给cc2530发送命令

java web-javaweb 开发的电商项目,如何在系统中使用缓存? 求大神赐教,感激不尽……

问题描述 javaweb 开发的电商项目,如何在系统中使用缓存? 求大神赐教,感激不尽-- 电商项目将常用数据缓存起来,比如,移动端首页的数据,商品分类等这些不经常变化的数据,目的是为了 增强 移动端Android.iOS 响应速度. 问题1:缓存,移动端首页的数据,商品分类等这些不经常变化的数据,线上运行的项目 ,是怎么做的,用到那些技术? 问题2:缓存应该怎么弄,是否要用到redis? 如果,不使用缓存,还有,其他什么解决方案吗? 解决方案 简单点的就用ehcache解决.

html-关于css float属性的疑问?

问题描述 关于css float属性的疑问? #a{background-color:red;color:white;float:left;} #b{background-color:blue;color:white;} a b 以上代码的效果是蓝色的div跟红色div在同一行且在红色div的右边,但是css教程上讲红色div浮动,蓝色div移动到原红色div的位置,从效果上来讲应该是红色的div覆盖了蓝色div才对. 第二:如果给这两个div加上相同的width和height属性值,效果就是红

c#-在winform中求一个只能输入 英文和数字的 正则表达式 要严谨点的

问题描述 在winform中求一个只能输入 英文和数字的 正则表达式 要严谨点的 在winform中 文本框 求一个只能输入 英文和数字的 正则表达式 要严谨点的 解决方案 在Changed里判断if (!Regex.IsMatch(textBox1.Text @""^[0-9A-Za-z]*$"")){ ...} 解决方案二: [0-9A-Za-z]* 解决方案三: 在文本框中添加一个KeyUp事件,绑定一个一个文本验证,至于正则,楼上的已经说了.希望对你有帮助.

ios-iOS 求推荐一个可在线听歌且可写入缓存的音乐类 谢谢

问题描述 iOS 求推荐一个可在线听歌且可写入缓存的音乐类 谢谢 如题 我发现大部分开源的音乐播放库 基本都是在线听歌 却没有边听边写入缓存的 求推荐 还是我理解 有误 我的目的是 首先我的UI会是一个tableview的列表 然后我会去搜索歌 一开始列表为空 此时从搜索去听歌 这时就是在线听歌 并缓存这首歌 下次即使没网也可以听上次那首歌 先谢谢了 在线等 解决方案 code4上面应该有,你去看看. 解决方案二: 你用什么?请求数据的,找一个带缓存的AFNetWorking 然后根据自己的需求

串口通讯-qt界面设计的串口通信

问题描述 qt界面设计的串口通信 初学者求大神指教!!!如何实现通过qt界面设计,按不同的按钮,向串口发送不同的数据,例如,点击1按钮后pc会向串口发送信号1 解决方案 参考:http://blog.chinaunix.net/uid-22670933-id-1771588.htmlhttp://jingyan.baidu.com/article/72ee561a5a644ce16138df37.html 解决方案二: QT串口通信QT串口通信QT 串口通信2

mybatis-tomcat集群+oscache 启动服务时 log4j 打印缓存监听jgroups启动失败

问题描述 tomcat集群+oscache 启动服务时 log4j 打印缓存监听jgroups启动失败 使用两个虚拟机搭建了一个小型tomcat集群,发布web项目(内置oscache缓存机制) oscache.properties广播配置为官方配置,网上资料一大堆,不再描述. tomcat服务器正常启动,具体问题描述如下: 问题1:启动tomcat服务器,log4j打印oscache错误信息如下: 2015-03-05 15:14:47,697 INFO GeneralCacheAdminis

串口通信-串口程序发送接收数据问题 (没有据传输)

问题描述 串口程序发送接收数据问题 (没有据传输) //接收数据 void ReceiveChar() { BOOL istrue; DWORD de = 0; char buffer[MAX] = { 0 }; DWORD data; BOOL f; DWORD doe; COMSTAT coms; BOOL m; OVERLAPPED over; /*********串口事件的设置***************/ istrue = SetCommMask(hComm, EV_RXCHAR |

麻烦大神帮我看看 串口发送的数据在windows下和ubuntu下显示不一致

问题描述 麻烦大神帮我看看 串口发送的数据在windows下和ubuntu下显示不一致 windows 下是这样子的 ubuntu下用minicom.cap接收后显示是这样子的 这是我的minicom的配置 这是我的串口信息 跪求大神帮我看看 解决方案 结果是一样的!windows下打印出来的是ASCII码值,Ubuntu下面打印出来的是ASCII码值对应的字符,0x7A对应字符z 0x3C对应字符< 解决方案二: 理论上说 这两个应该是一致的为什么出现了不同的结果