C#子线程执行完后通知主线程
来源:互联网 发布:70大中城市房价数据 编辑:程序博客网 时间:2024/05/29 14:46
其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿。
那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就很简单了委托传值嘛;
下面有一个例子,子线程干一件事情,做完了通知主线程
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 0
- C#子线程执行完后通知主线程
- C#子线程执行完后通知主线程
- c#子线程执行完怎么通知主线程
- c#子线程执行完怎么通知主线程
- c#子线程执行完怎么通知主线程
- 子线程执行完后,主线程在执行场景
- c# 子线程运行完通知主线程
- 主线程等待子线程执行完毕后再执行
- 主线程等待所有子线程完成后再执行
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Handler: 主线程如何通知子线程
- Handler主线程通知子线程做事
- 子线程都死亡通知主线程
- AndroidStudio 子线程通知主线程Demo
- Java 主线程等待子线程执行完再执行
- activeMQ集群
- 【学习C++】C++ Primer Plus (第六版)第十二章编程练习1-6
- poj 3094 Quicksum
- RS232串口通信详解
- python安装完毕后,提示找不到ssl模块的解决步骤
- C#子线程执行完后通知主线程
- JavaScript js闭包所用的场合以及优缺点
- 移动web:Tips消息弹出框
- RxJava
- 记录一些Android开发要用到的网站。
- eclipse下vim插件 打开文件目录
- 中国的民营银行
- iOS swift零基础学习心得
- 抓包工具Wireshark自定义协议解析lua脚本