苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 10792|回复: 16

[其他] web页面的一个多线程的疑问?

[复制链接]
发表于 2013-4-16 16:26:29 | 显示全部楼层 |阅读模式
        void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
            byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N   
            comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
            builder.Length = 0;//清除字符串构造器的内容   
            //因为要访问ui资源,所以需要使用invoke方式同步ui。   
            //this.Invoke((EventHandler)(delegate
            //{
                //直接按ASCII规则转换成字符串   
                builder.Append (Encoding.ASCII.GetString (buf ));
                //追加的形式添加到文本框末端,并滚动到最后。
                tGet.Text =builder.ToString () ;
            //}));
        }
原本windows窗体的invoke在这里能不能通过using来使他可以用;如果不能用,感觉很难找到可以完全替代invoke的方式啊。。求解


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-4-16 16:31:33 | 显示全部楼层
不用多线程这里无法接收数据,原因
1、采用了发完数据就关闭串口的方式;
2、如果此处采用for延时等待数据接收好再关闭串口,就需要另一个线程。
不知道理解是否妥当,求赐教
发表于 2013-4-16 16:35:34 | 显示全部楼层
枯叶化蝶 发表于 2013-4-16 16:31
不用多线程这里无法接收数据,原因
1、采用了发完数据就关闭串口的方式;
2、如果此处采用for延时等待数据 ...

[code=csharp] Thread pingTask = new Thread(new ThreadStart(delegate
            {
                //代码,这样也是开启一个子线程
            }));
            pingTask.Start();
[/code]
发表于 2013-4-16 16:44:12 | 显示全部楼层
Task.Factory.StartNew(()=>{
BeginInvoke(new Action(()=>{
         //在这里执行你的操作
     ))
);
 楼主| 发表于 2013-4-16 18:19:20 | 显示全部楼层
站长苏飞 发表于 2013-4-16 16:35

飞哥这个比invoke多了个start,应该放哪个位置呢?
 楼主| 发表于 2013-4-16 18:20:42 | 显示全部楼层
kidsoft 发表于 2013-4-16 16:44
Task.Factory.StartNew(()=>{
BeginInvoke(new Action(()=>{
         //在这里执行你的操作

哈哈,谢谢,你这个是不是说还能继续使用invoke,看不大懂啊
发表于 2013-4-16 18:54:51 | 显示全部楼层
枯叶化蝶 发表于 2013-4-16 18:19
飞哥这个比invoke多了个start,应该放哪个位置呢?

直接写下一行就行
 楼主| 发表于 2013-4-16 22:31:12 | 显示全部楼层
站长苏飞 发表于 2013-4-16 18:54
直接写下一行就行

嗯,明天在设备上试试,再来请教飞哥
 楼主| 发表于 2013-4-26 23:48:01 | 显示全部楼层
站长苏飞 发表于 2013-4-16 18:54
直接写下一行就行

不好意思,这么久才回,最近电脑废了去修理了。。。。飞哥,这个好像没解决问题啊。。还是没收到任何东西。
 楼主| 发表于 2013-4-26 23:50:56 | 显示全部楼层
站长苏飞 发表于 2013-4-16 16:35

        void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {   
            Thread pingTask = new Thread(new ThreadStart(delegate
            {
                int n = comm.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致   
                byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据,声明数组长度为N   
                comm.Read(buf, 0, n);//读取缓冲数据,从0到N。   
                builder.Length = 0;//清除字符串构造器的内容   
                //因为要访问ui资源,所以需要使用invoke方式同步ui。            //代码,这样也是开启一个子线程
            //this.Invoke((EventHandler)(delegate
            //{
                //直接按ASCII规则转换成字符串   
                builder.Append (Encoding.ASCII.GetString (buf ));
                //追加的形式添加到文本框末端,并滚动到最后。
                tGet.Text =builder.ToString () ;
            //}));
            }));
            pingTask.Start();     
        }

这个是按你的意思修改的,飞哥帮忙看看有什么不妥吗0.0

这个是web窗体的后台
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

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

© 2014-2021

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