如何关闭Form2,保留Form1, 以及串口接收数据的判断

问题描述

本人菜鸟。自学C#。现在遇到两个问题,第一个问题。在form1中,有个按钮,点击之后弹出已经做好的固定的界面form2.比如说当form2打开5秒之后,需要关掉Form2。不知道该如何关闭,因为总是提示使用了未引用的对象。privatevoidbtnStartSend_Click(objectsender,EventArgse)//按下按钮{FormForm2=newForm2();//新窗口Form2.ShowDialog();//显示新窗口,可以正常显示}private5s时间到{Form2.Dispose();//这里提示使用了未引用的对象}问题2:我用了一个SerialPort,现在有个问题就是不知道怎么去判断这一帧数据有没有接收完,方便后面的整帧数据的解析。因为在数据传送过程中,一帧数据通常是很多字节的(不确定),并且帧与帧之间是有很大的时间间隔的。这样就可以利用在比如说50ms内,串口都没有收到任何数据,我就认为这一帧数据已经结果了,开始解析数据,现在就是不知道怎么去实现这个功能,或者各位大侠有没有什么好方法。我现在是,在串口接收一个字节的事件中,关闭50ms的一个定时器,再重启,如果50ms内串口都没收到任何一个数据,那么定时器就超时了。我再定时器超时事件中,将串口的数据读出来分析。但是这样每一个字节都触发了接收事件,串口感觉好像有点处理不过来的感觉,求解惑。sp.DataReceived+=newSerialDataReceivedEventHandler(sp_DataReceive);//注册接收事件privatevoidsp_DataReceive(objectsender,SerialDataReceivedEventArgse)//接收事件{//sp.ReceivedBytesThreshold这个参数决定接收缓冲区接收多少个数据才出发接收相应事件,默认为1个RcvTimeOutTimer.Enabled=false;//复位50ms定时器RcvTimeOutTimer.Enabled=true;//重新开始计时}privatevoidRcvTimeOutTimer_Elapsed(objectsender,EventArgse)//50ms超时了,读出来数据处理{}}

解决方案

解决方案二:
1、把Form2定义在方法外面(全局变量)2、串口数据不能用时间分割吧,一个数据包应该有校验码,长度吧,通过这方面处理数据,没必要用Timer吧
解决方案三:
不要瞎编出什么“50毫秒”这种段子。一个串行总线上往往不只一台设备,另外就算只有一台设备,而且它还如你所愿动不动就停50毫秒,那么当一个消息发出时假设数据线恰好在打弯的地方、连接的地方接触不牢,或者恰好有一个电车通过,或者恰好绑在一起、靠近数据线的并行的另外一个网络的数据线上有了瞬间的强电磁干扰,那么这个可能你的消息还会延时一段时间。所谓延时,是刚学编程的人的小伎俩。正规的编程是明确地在数据上有消息结束标志,有校验码(这是因为串行通讯不可靠。而tcp通讯通常不需要校验)。
解决方案四:
http://blog.csdn.net/wuyazhe/article/details/5642431
解决方案五:
引用2楼sp1234的回复:

不要瞎编出什么“50毫秒”这种段子。一个串行总线上往往不只一台设备,另外就算只有一台设备,而且它还如你所愿动不动就停50毫秒,那么当一个消息发出时假设数据线恰好在打弯的地方、连接的地方接触不牢,或者恰好有一个电车通过,或者恰好绑在一起、靠近数据线的并行的另外一个网络的数据线上有了瞬间的强电磁干扰,那么这个可能你的消息还会延时一段时间。所谓延时,是刚学编程的人的小伎俩。正规的编程是明确地在数据上有消息结束标志,有校验码(这是因为串行通讯不可靠。而tcp通讯通常不需要校验)。

那请问何时将数据取出来进行分析?在SerialDataReceivedEventHandler事件中判断有没有消息结束标志?还是什么?请指教。

时间: 2024-10-24 12:14:22

如何关闭Form2,保留Form1, 以及串口接收数据的判断的相关文章

qt-QT第三串口接收数据后对数据进行解析

问题描述 QT第三串口接收数据后对数据进行解析 运用第三方串口类进行接收数据后 将数据存在temp中 ,然后再对temp进行解析判断进行不同的操作,但在编译时候会报错,如何解决? 解决方案 temp=='A'改成temp==""A""

怎么用c#编程不断的从串口接收数据并显示在textbox上,新手求帮助

问题描述 怎么用c#编程不断的从串口接收数据并显示在textbox上,新手求帮助 如题,怎么用c#编程不断的从串口接收数据并显示在textbox上,新手求帮助 解决方案 用个Timer每隔一段时间去读取数据,然后用textbox的textbox.text=""就行了,如果是要逐行的话就APPText就行了,不过建议你可以用richtextbox,那个有滚动条用着爽.

vb-VB串口接收数据重复怎么办????

问题描述 VB串口接收数据重复怎么办???? Private Sub HScrollBar1_Scroll(ByVal sender As System.Object ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll TextBox2.Text = HScrollBar1.Value SerialPort1.Write(TextBox2.Text) ' TextBox7.Text = Seria

串口通信-VC串口接收数据编程,帮忙指导下

问题描述 VC串口接收数据编程,帮忙指导下 我是VC初学者,领导让做一个简单的串口通讯接收程序.不知道怎么做.具体要求如下:希望大神帮忙指导从何入手,该怎么写,谢谢 要求:要两个标志位的数a5.b6和四个实际数()()()()还有一个是00(以后用来显示温度的)[]帧计数(目标加1,最大255然后再返回0~255)最后一个数组就是前边除下a5所有的校验和. 标志位a5.b6 [][][][] 温度00 () () 上边就是所有的要求了 解决方案 http://blog.csdn.net/vela

串口通信-android蓝牙串口接收数据

问题描述 android蓝牙串口接收数据 最近在做android手机蓝牙和单片机通信,一直被接收数据完整性这个问题困扰. 为了使一次通信的包保持完整,我就构思了发送12位的包,包头(1)+数据(8)+校验(2)+包尾(1),校验为求和校验.单片机发送数据的函数如下 void SendString(uchar *dat) //发送12位的包 包头(1)+数据(8)+校验(2)+包尾(1) { uchar i,j; uint check=0; //求和校验 SendChar(0x01); //0x0

保存数据-MSComm控件串口接收数据存到txt中出现乱码

问题描述 MSComm控件串口接收数据存到txt中出现乱码 我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收的数据和串口助手发送的数据不一致,出现了乱码.我还想把我接收到的数据存储在txt文件中,可能是我数据类型没有转换对,txt文件里的接收数据也是乱码,不知道哪位能指点一下. void CSendcomDlg::OnComm() { // TODO: Add your control notification handl

缓存-关于串口接收数据缓冲问题

问题描述 关于串口接收数据缓冲问题 我用串口测试实时接收一个2k采样率的正弦波并显示波形,不管是我自己写的程序还是Labview 都出现了同一个问题,就是一开始波形的频率是对的,然后我进入中断一会,回来继续接收数据 感觉波形被压缩了一样,突然来了一大堆数据,过一会就会恢复正常.这是缓存区哪里的问题呢?接收缓冲,传输缓冲? 解决方案 接收缓冲吧,数据没被处理. 解决方案二: 在中断时,串口设备还在不断的发送数据: 中断结束,恢复正常时:接收缓存区有一大堆数据,这时你有两种处理方式: 1.把这些数据

串口接收数据调用类的方法跟直接在主程序里写方法有什么区别?求大神指教,刚用这个提问,没分了。

问题描述 串口接收数据调用类的方法跟直接在主程序里写方法有什么区别?求大神指教,刚用这个提问,没分了. 为什么我直接在主程序里写的时候没问题,调用类里的方法就获取不到数据 解决方案 要看你的代码,比如有没有用到全局变量之类的. 解决方案二: 我分步调试的时候是能拿到数据的,但是直接运行的时候就获取不到. 解决方案三: 分布调试用的时间多,调用接受类的时候数据已经过来了.直接运行数据没过来,估计是数据同步的问题

30路串口接收数据,开始每一个串口已经绑定串口事件,那接收端怎么用一个Datarecived事件区分哪个串口的啊

问题描述 30路串口接收数据,开始每一个串口已经绑定串口事件,另外定义了一个类用来处理接收到的串口数据.程序启动时new了30个串口数据处理类的对象.问题:1)那接收端怎么用一个Datarecived事件区分哪个串口的啊?2)每个串口都绑定接收事件,这种情况下是不是相当于在程序开始就已经给每一个串口开辟了自己的内存数据处理空间,在开始阶段就实现了每一个串口的分流形式.因此接收时,每个口只是处理自己的,跟其他口的处理过程间无任何关系,完全独立? 解决方案 解决方案二:在线等,希望哥哥姐姐们指点迷津