其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿。  那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就很简单了委托传值嘛

下面有一个例子,子线程干一件事情,做完了通知主线程

public class Program
{
//定义一个为委托
public delegate void Entrust(string str);
static void Main(string[] args)
{
Entrust callback = new Entrust(CallBack); //把方法赋值给委托
Thread th = new Thread(Fun);
th.IsBackground = true;
th.Start(callback);//将委托传递到子线程中
Console.ReadKey();
}
private static void Fun(object obj) {
//注意:线程的参数是object类型
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("子线程循环操作第 {0} 次",i);
Thread.Sleep(500);
}
Entrust callback = obj as Entrust;//强转为委托
callback("我是子线程,我执行完毕了,通知主线程");
//子线程的循环执行完了就执行主线程的方法
}
//主线程的方法
private static void CallBack(string str) {
Console.WriteLine(str);
}
}

上面就是一个通过委托进行向主线程传值(也就是通知主线程)的过程,上面我们是自己定义了一个委托,当然我们也可以使用.NET为我们提供的Action<>和Fun<>泛型委托来处理,就像这样

public class Program
{
//定义一个为委托
public delegate void Entrust(string str);
static void Main(string[] args)
{
Action<string> callback = ((string str) => { Console.WriteLine(str); });
//Lamuda表达式
Thread th = new Thread(Fun);
th.IsBackground = true;
th.Start(callback);
Console.ReadKey();
}
private static void Fun(object obj) {
for (int i = 1; i <= 10; i++)
{
Console.WriteLine("子线程循环操作第 {0} 次",i);
Thread.Sleep(500);
}
Action<string> callback = obj as Action<string>;
callback("我是子线程,我执行完毕了,通知主线程");
} }
//上面的Lamuda表达式也可以回城匿名函数
//Action<string> callback = delegate(string str) { Console.WriteLine(str); };

下面是运行结果 

最新文章

  1. MongoDB 分片管理
  2. ffmpeg-20160908[09,10,13,15,19,21,22,24]-bin.7z
  3. C++ CreateThread 实例
  4. Wordpress模板标签大全
  5. Android应用开发学习笔记之菜单
  6. 递归遍历树结构顺序显示并且添加到list集合
  7. 访问WEB-INF目录中的JSP文件
  8. NOIP2007 统计数字
  9. JUC全景图
  10. asp.net MVC 验证注解
  11. Week13(12月5日):不怕错误,慢慢来 :)
  12. WCF技术剖析之八:ClientBase&lt;T&gt;中对ChannelFactory&lt;T&gt;的缓存机制
  13. FZOJ2111:Min Number
  14. Guava Cache 本地缓存组件浅析
  15. 解决VS Code使用code runner开发Python乱码问题
  16. ffmpeg笔记
  17. print()与println()区别
  18. Silverlight StoryBoard 动态切换ImageSource
  19. 网络下载功能实现(downloader ) ---- HTML5+
  20. 使用Linux重定向解决nohup.out无写权限问题

热门文章

  1. SQL数据库调优
  2. 【安卓进阶】Product Flavor基础玩法
  3. 树状数组例题-数星星,简单题easy,校门外的树2,清点人数
  4. SQLServer函数 left()、charindex()、stuff()
  5. 验证账号密码是否为空 if格式
  6. 动态menu导航条以及treeview树
  7. tsnr--基于vpp+dpdk的高性能防火墙
  8. QTP安装出现windoes installer不能安装升级修补程序问题
  9. C++标准库分析总结(二)——&lt;模板,分配器,List&gt;
  10. vue tab嵌入iframe切换不刷新,相对完整的方案