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#子线程执行完后通知主线程的方法

标签:C#,子线程,主线程
0
投稿

猜你喜欢

  • Java中io流解析及代码实例

    2023-08-22 16:46:48
  • 采用C#实现软件自动更新的方法

    2021-12-30 19:13:38
  • Java实战之实现一个好用的MybatisPlus代码生成器

    2023-06-18 02:16:10
  • Java算法之递归算法计算阶乘

    2021-06-30 14:10:56
  • SpringBoot中的Aop用法示例详解

    2023-03-31 14:12:00
  • 详解关于SpringBoot的外部化配置使用记录

    2023-08-10 03:54:54
  • java 归并排序的实例详解

    2021-12-06 22:58:05
  • Android 在程序运行时申请权限的实例讲解

    2023-08-04 17:35:57
  • spring cloud zuul增加header传输的操作

    2022-12-31 17:24:50
  • C#中闭包概念讲解

    2022-08-16 05:16:28
  • C#实现的简单验证码识别实例

    2022-09-16 03:44:11
  • 利用java操作Excel文件的方法

    2021-12-13 03:03:49
  • MyBatis的嵌套查询解析

    2023-11-26 16:58:46
  • Spring BeanFactory 与 FactoryBean 的区别详情

    2023-12-23 02:51:46
  • Java使用Redis实现秒杀功能

    2023-04-11 11:26:54
  • 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
  • asp之家 软件编程 m.aspxhome.com