C#多线程应用:子线程更新主窗体控件的值(一)
我记得以前写过一次关于多线程的调用及更新的文章,由于时间比较久了,现在一时没找到。在做项目的时候,用到了多线程,还是有很多的同事在问多线程更新主窗体的事情,现在就这个事情做个记录。
说起多线程之间的更新或调用,无非都是代理之类的,可能很多人有不同的看法。
今天也不想和大家讨论底层的实现,就目前的问题而说,告诉大家两个常用的方式进行线程间的调用:
1)定义一个委托代理实现回调函数;
2)在子线程中使用Invoke返回主线程;
刚刚我已经说了,今天主要说代理的使用,如果你对这方面的知识点相对薄弱的话,最好先查查代理的使用。
对于上面的这两种方式的不同一个是主线程实现,另一个在子线程中实现,详细的不同的使用你可以去百度看看;
今天主要告诉大家第一种方式,在主线程中实现具体功能,由于此类代码网上到处都是,所以我也直接从网上copy一份,以下是代码的实现:
程序了开 了4个子线程.各自独立.子线程根据输入信号判断while循环,符合条件退出while循环,该子线程就算运行结束了,可是主线程怎么知道他执行完了呢?
难道用一个时间触发器,多少时间检测一下各个进程的运行情况?
问题补充:
难道用一个时间触发器,多少时间检测一下各个线程的运行情况?
定义一个委托实现回调函数
public delegate void CallBackDelegate(string message); 程序开始的时候
//把回调的方法给委托变量
CallBackDelegate cbd = CallBack;
//启动线程
Thread th = new Thread(Fun);
th.Start(cbd);//开始线程,代入参数 //线程执行的方法 参数是个委托, 线程中参数需要用object类型.
public void Fun(object o)
{
//这里是你的操作代码,循环,根据条件退出while
while(true)
{
}
//把传来的参数转换为委托
CallBackDelegate cbd = o as CallBackDelegate;
//执行回调.
cbd("这个线程传回的信息");
} //回调方法
private void CallBack(string message)
{
//主线程报告信息,可以根据这个信息做判断操作,执行不同逻辑.
MessageBox.Show(message);
}
出处:http://blog.csdn.net/suncherrydream/article/details/8571890
C#多线程应用:子线程更新主窗体控件的值(一)的更多相关文章
- C#多线程应用:子线程更新主窗体控件的值(二)
在上篇文章中,我已经给大家列了一个在主线程中实现的方式,这篇文章来给大家说说使用Invoke的方式的例子: 对于不代理不太熟悉的朋友,建议先查查相关资料: 例子一: 在C#中,直接在子线程中对窗体上的 ...
- c#中跨线程调用windows窗体控件
c#中跨线程调用windows窗体控件解决. 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来 ...
- c#中如何跨线程调用windows窗体控件
c#中如何跨线程调用windows窗体控件? 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首 ...
- 如何跨线程调用Windows窗体控件
通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它.那么,如何解决跨 ...
- Android子线程更新主界面
学习什么的还是要真正的有应用,有需求才能在最短的时间里面牢牢掌握一项技术. 今天就是这样的,产品一个需求下来,十万火急啊.然后之前只稍稍接触过,只能硬着头皮上了.最后牢牢地掌握了最简单的Handler ...
- C#多线程开发中如何更新UI界面控件内容
子线程不能修改UI线程的状态(比如文本框里面的内容). 解决的办法是写一个用来更新文本框内容的函数,然后在Worker线程里面通过BeginInvoke来利用delegate调用这个函数更新文本框. ...
- c#中如何跨线程调用windows窗体控件?
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来看传统方法: public partial c ...
- 在子线程更新主线程的UI组件
1.实例化一个 private Handler handlerBublishTopic = new Handler(Looper.getMainLooper()); 2. handlerBublish ...
- (转载)c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值
第一种方法: 用委托,Form2和Form3是同一组 Form2 C#代码 using System; using System.Collections.Generic; using System.C ...
随机推荐
- Rabbitmq安装、集群与高可用配置
历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...
- 如何解决Nginx php 50x 错误
SEO反馈百度爬虫经常504,一般情况下是由nginx默认的fastcgi进程响应慢引起的,但也有其他情况,这里我总结了一些解决办法供大家参考. 方法/步骤 一般50x状态码问题分析: Nginx ...
- [经验分享]SecureCRT导出操作日志 + Notepad自定义语言格式高亮日志文件
起因及效果展示 最近使用CRT,有些命令会输出很多内容,这时如果你想要得知输出内容是从哪里开始的,很容易被大量的同种颜色的文字搞的晕头转向.如果输入的命令是不同的颜色,这会大大得帮助我们. 所谓的命令 ...
- Mininet实验 命令延伸实验扩展
本文参照:Mininet 命令延伸实验扩展 步骤1:命令行创建拓扑 sudo mn --topo minimal 最小的网络拓扑,一个交换机下挂两个主机. sudo mn --topo linear, ...
- $n,$!等的含义
$$ Shell本身的PID(ProcessID)$! Shell最后运行的后台命令的PID$? 上一个运行的命令是否成功的标志,成功为0,失败不为0$* 所有参数列表.如"$*" ...
- sapply
列表并非总是存储结果的最佳容器.有时,我们希望将结果放在一个向量或者矩阵中.sapply( )函数可以根据结果的结构将其合理简化.假设,我们将平方运算应用到 1:10 的每个元素上.如果使用 lapp ...
- [OSG]OSG的相关扩展
参考:osg官网 http://www.osgchina.org/index.php?view=article&id=176 http://trac.openscenegraph.org/pr ...
- 代码注释,神兽护体,代码无bug
/** * * ━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ┗━┓ ┏━┛ ...
- Spring IOC 源码简单分析 01 - BeanFactory
### 准备 ## 目标 了解 Spring IOC 的基础流程 ## 相关资源 Offical Doc:http://docs.spring.io/spring/docs/4.3.9.RELEASE ...
- Undertow,Tomcat和Jetty服务器配置详解与性能测试
undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验.然而:当下微服务兴起,s ...