子线程调用UI线程的方法
时间:2022-04-23
本文章向大家介绍子线程调用UI线程的方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
vs2005中,子线程不允许使用UI中的控件,网上的解决方法都有:使用控件的Invoke,不过在我自己的应用中总觉得麻烦:我要从子线程中调用一个主线程中的处理,要用一次委托,而Invoke还要用委托,绕来绕去,把人绕的很晕。我稍微改了一下结构,可以比较方便的达到在子线程中调用UI线程中的处理函数。
在线程类中,定义
public delegate void ReceivedHandlerUI(object obj); //接收处理,涉及UI
使用两个变量,第二个只要是界面中的任意控件都行,主要是利用它回到UI线程
public ReceivedHandlerUI OnReceivedUI; //接收处理函数,涉及UI
public System.Windows.Forms.Control UICtrol; //界面中的任意控件
关联的方法
public void SetReceivedUserUI(ReceivedHandlerUI rh, System.Windows.Forms.Control ctl)
{
OnReceivedUI = rh;
UICtrol = ctl;
}
子线程中需要调用UI中的处理:
if (OnReceivedUI != null && UICtrol != null)
{
UICtrol.Invoke(OnReceivedUI, state);
}
---------------------------------------------
UI中处理,往往会变化,但只要这么做
threadobj.SetReceivedUserUI(new ReceivedHandlerUI(MyReceivedHandlerUI), this);
//界面处理
void MyReceivedHandlerUI(object obj)
{
LineInfo li = (LineInfo)obj;
textBox2.Text += "收到数据:" + li.RetrieveFromBuffer()+"rn";
}
我的程序中,子线程的处理相对稳定,主界面中的处理反而相对变化,这种处理方式,可以很快的写出需要的处理程序,可以使用任意控件。同时,由于是在UI线程中执行,所以操作控件时也不用考虑并发性线程安全之类的。
- EsRejectedExecutionException排错与线程池类型
- python重试(指数退避算法)
- 动手为王 | Oracle 数据库跨版本升级迁移实践
- 日志归档与数据挖掘
- Redis实现分布式锁
- Mybatis分页插件PageHelper的配置和使用方法
- 另类保存微信公众平台历史消息的方法 - 星标消息
- CentOS环境下Docker私有仓库搭建
- spark三种连接join
- 用firebug给firefox添加信任链接
- Elasticsearch索引别名、Filtered索引别名、Template
- 追本溯源:Oracle 只读表空间的探索实践
- firefox查看微信公众平台的数据分析时就出现不信任链接怎么办?
- spark-streaming集成Kafka处理实时数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python如何从键盘获取输入实例
- 使用Keras实现Tensor的相乘和相加代码
- php无限级分类实现评论及回复功能
- php获取手机端的号码以及ip地址实例代码
- PHP数组遍历的几种常见方式总结
- 详解php协程知识点
- php curl简单采集图片生成base64编码(并附curl函数参数说明)
- PHP通过get方法获得form表单数据方法总结
- PHP filesize函数用法浅析
- PHP中创建和编辑Excel表格的方法
- php二维数组按某个键值排序的实例讲解
- thinkphp5引入公共部分header、footer的方法详解
- php实现文章评论系统
- PHP如何搭建百度Ueditor富文本编辑器
- 浅谈keras.callbacks设置模型保存策略