http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

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

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

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

查看: 8540|回复: 2

[Winform] 自定义类访问主线程控件(委托的用法)

[复制链接]
发表于 2014-2-21 00:37:53 | 显示全部楼层 |阅读模式
本帖最后由 ro4ters 于 2014-2-21 00:42 编辑

- - 写了个基于三层的聊天软件,服务端和客户端写一起了.这下遇见个犯2的问题,
底层解包以后通知UI更新界面.....
最终还是决定用委托吧,(如果用事件是不是会更好?)
问题来了,自定义类里面木有invoke方法.也就是说我要跨线程访问主线程UI(异步socket会自己产生多线程)....
2了.当然最简单的办法就是主线程加Control.CheckForIllegalCrossThreadCalls=false;
这东西大微软都说了不是什么好方法,会引发未知异常...
几番搜索无果..
说说原本结构:
Mode里面加了个委托,并声明了一个静态的委托变量,
主线程实例化变量(指向test2方法)传递更新控件方法.
这样就会抛跨线程访问的异常...
换了个思路想了下,既然结果是另一条线程传递过来的,那么我就让创建控件的线程去更新它!
其实就是再主线程声明一个委托,专门用来调用方法更新,
于是乎加了方法2,里面调用控件的invoke方法!异常解决...


代码如下
[C#] 纯文本查看 复制代码
 
 public delegate void dele(string str);//主线程委托,用来更新自定义类委托传递来的值

//更新显示内容
public void test1(string str)
        { 
            labtest.Text += str + "\r\n";  // labtest.Text += str + "\r\n"; 如果子类 直接调用mode中静态的委托,这里会异常 
        }
//再实例化一个委托
        public void test2(string str)
        {
            d = new dele(test1);
            labtest.Invoke(d,str);
           
        }

也算是给小伙伴们教一招在自定义类里面如何更新主界面..虽然方法二了点...如果有啥更好的方法请告知,不胜感谢....!
HaveFun..
by:Ro4ters
21-02/2014


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-2-21 08:05:53 | 显示全部楼层
在主线程定义委托,在类里面调用,应该就行了,
发表于 2014-2-22 09:13:24 | 显示全部楼层
线程跟委托都没接触过。。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

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

GMT+8, 2024-11-15 17:00

© 2014-2021

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