c#winform跨线程访问控件
2016-07-25 00:00
465 查看
摘要: 专门的dll引用后,即可通过简单的操作来跨线程访问控件了。
参数:Contorl指代控件,methodName表示当天cs文件中一个方法的名字,用于在这个方法下进行控件的赋值操,args是这个methodName这个方法的参数类型
使用方式:见上面代码的调用过程.相信你能看懂,并不难。
参数 :Control,将要访问的控件;propertyName,控件的属性值
使用方式:见上面的使用案例
参数:Control,将要访问的控件;noncontrol,一个扩展对象,如果不为null则该函数的功能时拿取该对象的属性值;propertyName,控件的属性值
使用方式:object t=InvokeHelper.Get(label1,label1.TopLevelControl,"Text"); //这样拿到的将是lable控件顶层容器的Text属性值
参数:Control,控件;propertyName,控件属性值;value,将要赋值给控件属性的数据
使用方式:见上面的实例
参数:Control,控件;propertyName,控件属性值;noncontrol,一个扩展对象,如果不会null,则该函数的功能是设置该扩展对象的属性值;value,将要赋值给控件属性的数据
使用方式: InvokeHelper.Set(label1, label1.TopLevelControl, "Text","Hello");将hello赋值给label1的父级控件的text属性
dll下载 密码:9wve
1.背景
对于winform程序来说,当我们点击按钮,需要消耗一定时长才能拿到数据后才能显示在界面上某个控件上的情况,我们通常会专门开一个线程去拿数据,这样不会造成界面处于假死状态2.常规做法
//启动线程 private void button1_Click(object sender, EventArgs e) { Thread t = new Thread(GetValue); t.IsBackground = true; t.Start(); } void GetValue() { Thread.Sleep(2000);//耗时操作 string content = "hi!"; label1.Invoke(new Action(() => { label2.Text = content; }));//控件回调,显示数据 }
3.封装异步加载数据,形成轮子,方便以后直接使用示例
//启动线程 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下载
xml注释下载 密码:hd0zdll下载 密码:9wve
6.关于
本人qq:739462304欢迎大家一起交流学习相关文章推荐
- C#中Invoke 和 BeginInvoke 的真正涵义
- PHP 5.3新增魔术方法__invoke概述
- Java反射机制及Method.invoke详解
- C# Invoke
- JavaBean 反射机制实现自动配置数据
- 动态代理Proxy
- JAVA笔记【20131212】
- WPF 如何在线程中打开子窗体
- "The test form is only available for requests from the local machine"解决方法
- Control.Invoke
- Control的Invoke和BeginInvoke
- visual c#被Invoke调用的函数内部发生异常时,IDE不能定位到被Invoke函数内部的代码行
- JAVA深入研究——Method的Invoke方法。
- C#中跨线程操作控件 --- InvokeRequired 属性 与Invoke方法
- java 反射
- WPF 新线程中使用Invoke操作页面控件
- React Native十四:原生模块
- C# WinForm多线程开发(三) Control.Invoke
- Unity 延迟执行一段代码的较为优雅的方式
- C#学习之多线程开发技术(十二)