苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

12
返回列表 发新帖
楼主: 枯叶化蝶

[其他] serialport接收延时关闭问题

[复制链接]
 楼主| 发表于 2013-4-27 11:15:57 | 显示全部楼层
站长苏飞 发表于 2013-4-27 10:58
应该不会,你可以加个判断啊,如果是打开状态就不要再执行Open了

            //Thread pingTask = new Thread(new ThreadStart(delegate
                //{
                  //  tGet.Text = "";
                    //comm.PortName = dSerPor.Text;
                    //comm.BaudRate = int.Parse(dBouRat.Text);
                    //comm.Open();
                    while (true)
                    {
                        if (tGet.Text != "")
                        {
                            comm.Close();
                            break;
                        }
                        else
                            comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
                            builder.Length = 0;//清除字符串构造器的内容                           
                            //直接按ASCII规则转换成字符串   
                            builder.Append(Encoding.ASCII.GetString(buf));
                            //追加的形式添加到文本框末端,并滚动到最后。
                            tGet.Text = builder.ToString();
                    }

飞哥,。。。我发现不用线程直接这样都不行啊。。。这个我真的是无从下手了。。。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-4-27 11:19:17 | 显示全部楼层
站长苏飞 发表于 2013-4-27 10:58
应该不会,你可以加个判断啊,如果是打开状态就不要再执行Open了

        void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)  
        {  
            int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
            byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N   
            received_count += n;//增加接收计数   
            comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
            builder.Length=0;//清除字符串构造器的内容   
            //因为要访问ui资源,所以需要使用invoke方式同步ui。   
            this.Invoke((EventHandler)(delegate  
            {
                //判断是否是显示为16进制
                //if (checkBoxHexView.Checked)  
                //{
                       //依次的拼接出16进制字符串   
                    //foreach (byte b in buf)  
                    //{  
                      //  builder.Append(b.ToString("X2") + " ");  
                    //}  

                //}  
                //else  
                //{  

                    //直接按ASCII规则转换成字符串   
                    builder.Append(Encoding.ASCII.GetString(buf));  
                //}  
                //追加的形式添加到文本框末端,并滚动到最后。   
                this.txGet.AppendText(builder.ToString());  
                //修改接收计数   
                labelGetCount.Text = "Get:" + received_count.ToString();  
            }));  
        }
在windows窗体中这样回复的很好啊
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-26 03:35

© 2014-2021

快速回复 返回顶部 返回列表