线程开启方法之一——异步委托
1 class Program 2 { 3 private static void Text1() 4 { 5 Console.Write("这是TEXT1程序"); 6 } 7 static void Main(string[] args) 8 { 9 Action a = Text1; 10 a.BeginInvoke(null,null);//用beginInvoke方法开个一个新的线程 11 Console.Write("这是主进程"); 12 Console.ReadKey(); 13 } 14 }
运行最终结果如上图,一般按顺序执行是先显示TEXT1方法的内容再显示main方法的内容,而异步执行显示的结果是不一样的
2.如果运用有返回值的委托方法,代码如下
1 private static int Text2(int a,string b) 2 { 3 Console.Write("这是Text2程序"); 4 Thread.Sleep(100);//让这个方法暂停0.1秒 5 return 200; 6 } 7 static void Main(string[] args) 8 { 9 Func<int,string,int> a = Text2;//用Func来进行委托 10 IAsyncResult result= a.BeginInvoke(30,"pnzpb",null, null);//定义一个iasyncResult变量来存储a得到的值 11 Console.WriteLine("这是主程序"); 12 //如果a这个方法还没执行完,iscompleted为false 13 if (result.IsCompleted == false) 14 { 15 Console.Write("."); 16 Thread.Sleep(10);//控制子线程的监测频率 17 } 18 int res= a.EndInvoke(result);//定义一个int变量才存储最终得到的值 19 Console.WriteLine(res); 20 Console.ReadKey(); 21 22 } 23
结果如图,"."表示方法还没异步执行的线程还没有执行完,执行完毕之后输出设置好的返回值“200”