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