Invoke BeginInvoke EndInvoked的使用 简单的线程同步

来源:互联网 发布:ogame银河帝国源码 编辑:程序博客网 时间:2024/05/21 09:16
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace _11._3._1{    class Program    {        public delegate int FooDelegate(string s);        static void Main(string[] args)        {            Console.WriteLine("主线程" + Thread.CurrentThread.ManagedThreadId);            FooDelegate fooDelegate = Foo;            IAsyncResult result = fooDelegate.BeginInvoke("Hello World.", null, null);            Console.WriteLine("主线程继续执行...");            Console.WriteLine("结果是" );            //当使用BeginInvoke异步调用方法时,如果方法未执行完,EndInvoke方法就会一直阻塞,直到被调用的方法执行完毕,线程同步。            int n = fooDelegate.EndInvoke(result);            Console.WriteLine("回到主线程" + Thread.CurrentThread.ManagedThreadId);            Console.WriteLine("结果是" );            Console.ReadKey(true);        }        public static int Foo(string s)        {            Console.WriteLine("函数所在线程" + Thread.CurrentThread.ManagedThreadId);            Console.WriteLine("异步线程开始执行:" + s);            Thread.Sleep(1000);            return s.Length;        }    }}

1、声明委托
2、委托实例化
3、用委托异步线程 BeginInovke
4、阻塞主线程 EndInovke

阅读全文
0 0
原创粉丝点击