C#子线程执行完后通知主线程的方法

所属分类: 软件编程 / C#教程 阅读数: 43
收藏 0 赞 0 分享

其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿。

那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就很简单了委托传值嘛;

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

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#学习笔记之状态模式详解

这篇文章主要为大家详细介绍了C#学习笔记之状态模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C# 字符串、数组和List的截取和转换实例

下面小编就为大家分享一篇C# 字符串、数组和List的截取和转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

c#打包文件解压缩的实例

下面小编就为大家分享一篇c#打包文件解压缩的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题

下面小编就为大家分享一篇浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题,具有很好的参考价值,希望对大家有所帮助
收藏 0 赞 0 分享

判断一个整数是否是2的N次幂实现方法

下面小编就为大家分享一篇判断一个整数是否是2的N次幂实现方法,实例简洁,具有很好的参考价值。希望对大家有所帮助
收藏 0 赞 0 分享

浅谈c#中config.exe 引发的一些问题

下面小编就为大家分享一篇浅谈c#中config.exe 引发的一些问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

基于C#开发中的那些编码问题(详谈)

下面小编就为大家分享一篇基于C#开发中的那些编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

C#实现WPS文件转PDF格式的方法示例

这篇文章主要介绍了C#实现WPS文件转PDF格式的方法,涉及C#针对office组件的相关引用与操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

C#实现的文件上传下载工具类完整实例【上传文件自动命名】

这篇文章主要介绍了C#实现的文件上传下载工具类,结合完整实例形式分析了C#操作文件上传与下载功能,并且还可针对上传文件自动命名以避免服务器中的文件名重复,需要的朋友可以参考下
收藏 0 赞 0 分享

C# Socket 发送&接收&返回 简单应用实例

下面小编就为大家分享一篇C# Socket 发送&接收&返回 简单应用实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多