博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#跨线程访问控件帮助类
阅读量:4979 次
发布时间:2019-06-12

本文共 2579 字,大约阅读时间需要 8 分钟。

1.背景

对于winform程序来说,当我们点击按钮,需要消耗一定时长才能拿到数据后才能显示在界面上某个控件上的情况,我们通常会专门开一个线程去拿数据,这样不会造成界面处于假死状态

2.常规做法

1         //启动线程 2         private void button1_Click(object sender, EventArgs e) 3         { 4             Thread t = new Thread(GetValue); 5             t.IsBackground = true; 6             t.Start(); 7         } 8  9         void GetValue() 10         {11             Thread.Sleep(2000);//耗时操作12           13             string content = "hi!";14             label1.Invoke(new Action(() => { label2.Text = content; }));//控件回调,显示数据15         }

 

3.封装异步加载数据,形成轮子,方便以后直接使用示例

/*演示InvokeHelper(我们即将构造的帮助类)的使用方法*/ //启动线程        private void button1_Click(object sender, EventArgs e)        {            Thread t = new Thread(GetValue);            t.IsBackground = true;            t.Start();        }            //加载比较耗时的数据        void GetValue()         {            Thread.Sleep(2000);            string value = "hello,异步!";            InvokeHelper.Invoke(this, "DoWork", value);//演示invoke方法            InvokeHelper.Set(label1, "Text", "兔");//演示set方法            object temp = InvokeHelper.Get(label1, "Tag"); //演示Get方法            InvokeHelper.Set(label2, "Text", temp);        }        //控件赋值赋值        public void DoWork(string value)         {            richTextBox1.Text = value;        }

 

4.该Rabbit.InvokeHelper.DLL使用说明手册

   方法简介:

 I.public static object Invoke(Control control, string methodName, params object[] args)  

    功能:主要用于其他线程做完耗时操作拿到数据后,给UI线程上的控件赋值

    参数:Contorl指代控件,methodName表示当天cs文件中一个方法的名字,用于在这个方法下进行控件的赋值操,args是这个methodName这个方法的参数类型

    使用方式:见上面代码的调用过程.相信你能看懂,并不难。

II.  public static object Get(Control control, string propertyName)

    功能:从其他线程里跨线程拿取UI控件的值

    参数 :Control,将要访问的控件;propertyName,控件的属性值

    使用方式:见上面的使用案例

III.  public static object Get(Control control, object noncontrol, string propertyName)

   功能:从其他线程里跨线程拿取UI控件的值

   参数:Control,将要访问的控件;noncontrol,一个扩展对象,如果不为null则该函数的功能时拿取该对象的属性值;propertyName,控件的属性值

   使用方式:object t=InvokeHelper.Get(label1,label1.TopLevelControl,"Text"); //这样拿到的将是lable控件顶层容器的Text属性值

IV.  public static void Set(Control control, string propertyName, object value)

   功能:从其他线程给UI线程控件设置一个值

   参数:Control,控件;propertyName,控件属性值;value,将要赋值给控件属性的数据

   使用方式:见上面的实例

V. public static void Set(Control control, object noncontrol, string propertyName, object value)

   功能:从其他线程给UI线程控件设置一个值

   参数:Control,控件;propertyName,控件属性值;noncontrol,一个扩展对象,如果不会null,则该函数的功能是设置该扩展对象的属性值;value,将要赋值给控件属性的数据

  使用方式: InvokeHelper.Set(label1, label1.TopLevelControl, "Text","Hello");将hello赋值给label1的父级控件的text属性

5.dll下载

 密码:hd0z        

      密码:9wve

6.关于

本人qq:739462304,欢迎大家一起交流学习

转载于:https://www.cnblogs.com/huanxi/p/5703282.html

你可能感兴趣的文章
宏定义
查看>>
笔记:git基本操作
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
optionMenu-普通菜单使用
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>
JSP常用标签
查看>>
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>