C#子线程执行完后通知主线程的方法
作者:jingxian 时间:2022-02-26 20:15:40
其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿。
那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就很简单了委托传值嘛;
下面有一个例子,子线程干一件事情,做完了通知主线程
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); };
下面是运行结果
标签:C#,子线程,主线程
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java中io流解析及代码实例
2023-08-22 16:46:48
![](https://img.aspxhome.com/file/2023/5/58195_0s.jpg)
采用C#实现软件自动更新的方法
2021-12-30 19:13:38
Java实战之实现一个好用的MybatisPlus代码生成器
2023-06-18 02:16:10
![](https://img.aspxhome.com/file/2023/8/57498_0s.png)
Java算法之递归算法计算阶乘
2021-06-30 14:10:56
![](https://img.aspxhome.com/file/2023/4/63454_0s.png)
SpringBoot中的Aop用法示例详解
2023-03-31 14:12:00
![](https://img.aspxhome.com/file/2023/6/62986_0s.png)
详解关于SpringBoot的外部化配置使用记录
2023-08-10 03:54:54
java 归并排序的实例详解
2021-12-06 22:58:05
Android 在程序运行时申请权限的实例讲解
2023-08-04 17:35:57
![](https://img.aspxhome.com/file/2023/7/85997_0s.jpg)
spring cloud zuul增加header传输的操作
2022-12-31 17:24:50
C#中闭包概念讲解
2022-08-16 05:16:28
C#实现的简单验证码识别实例
2022-09-16 03:44:11
![](https://img.aspxhome.com/file/2023/0/82240_0s.jpg)
利用java操作Excel文件的方法
2021-12-13 03:03:49
MyBatis的嵌套查询解析
2023-11-26 16:58:46
Spring BeanFactory 与 FactoryBean 的区别详情
2023-12-23 02:51:46
![](https://img.aspxhome.com/file/2023/8/66498_0s.webp)
Java使用Redis实现秒杀功能
2023-04-11 11:26:54
![](https://img.aspxhome.com/file/2023/1/78001_0s.jpg)
Swagger注解-@ApiModel和@ApiModelProperty的用法
2023-02-05 23:57:48
C#对文件进行加密解密代码
2023-03-22 12:17:18
Spring在SingleTon模式下的线程安全详解
2021-10-08 11:39:31
Spring中的注解@Autowired实现过程全解(@Autowired 背后的故事)
2023-01-01 06:02:53
java内存优化的方法总结
2022-12-01 22:25:20