手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#子线程执行完后通知主线程的方法
C#子线程执行完后通知主线程的方法
摘要:其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿。那么怎么让子线程去做主线程的事儿呢,...

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

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

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

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

以上这篇C#子线程执行完后通知主线程的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持查字典教程网。

【C#子线程执行完后通知主线程的方法】相关文章:

C#中一些你可能没用过的调试窗口的方法

TextBox获取输入焦点时自动全选的实现方法

c#之利用API函数实现动画窗体的方法详解

C# 抓取网页内容的方法

PowerShell 定时执行.Net(C#)程序的方法

C#中隐式运行CMD命令行窗口的方法

C# 如何判断两个文件内容是否相同的方法

C# 获取属性名的方法

浅解关于C#多线程的介绍

C# 读取指定路径配置文件的方法

精品推荐
分类导航