C#多线程应用:子线程更新主窗体控件的值(一)

我记得之前写过一次关于多线程的调用及更新的文章,因为时间比较久了,如今一时没找到。在作项目的时候,用到了多线程,仍是有不少的同事在问多线程更新主窗体的事情,如今就这个事情作个记录。web

提及多线程之间的更新或调用,无非都是代理之类的,可能不少人有不一样的见解。多线程

今天也不想和你们讨论底层的实现,就目前的问题而说,告诉你们两个经常使用的方式进行线程间的调用:函数

1)定义一个委托代理实现回调函数;spa

2)在子线程中使用Invoke返回主线程;.net

刚刚我已经说了,今天主要说代理的使用,若是你对这方面的知识点相对薄弱的话,最好先查查代理的使用。线程

对于上面的这两种方式的不一样一个是主线程实现,另外一个在子线程中实现,详细的不一样的使用你能够去百度看看;代理

今天主要告诉你们第一种方式,在主线程中实现具体功能,因为此类代码网上处处都是,因此我也直接从网上copy一份,如下是代码的实现:code

 

程序了开 了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
相关文章
相关标签/搜索