c#基础之委托 异步 回调 .

                在程序中使用异步回调,可以通过在不同的线程中执行程序的不同部分.实现程序的快速响应.

demo如下:

View Code
 1 class Program
 2     {
 3         internal delegate int methoddelegate(int num1, int num2);// 首先定义一个委托 
 4         static void Main(string[] args)
 5         {
 6             methoddelegate m = add; //创建一个委托  指向add 方法
 7             /** AsyncCallback 是引用某个方法的委托,当异步完成操作时调用该方法,此处设置委托调用后面定义的resultasync 方法*/
 8             AsyncCallback a = resultasync; // asynccallback 指向 resultasync
 9             Console.WriteLine("async invoking the method begin....");
10             /**使用 BeginInvoke异步调用add 方法 并传入 参数及回调函数
11              *         BeginInvoke方法异步调用委托,在调用异步委托后,下一条语句会继续执行,
12              *         该方法返回 IAsyncResult的变量,该变量表示异步操作的状态.
13              *
14              */
15             IAsyncResult ia = m.BeginInvoke(1, 2, resultasync, null);
16             Console.WriteLine("continus this....");
17             Console.ReadLine();
18         }
19         //定义 resultasync方法获取计算的结果,该方法接受IAsyncResult类型的实参.
20         static void resultasync( IAsyncResult rd)
21         {
22             methoddelegate del = (methoddelegate)((AsyncResult)rd).AsyncDelegate;//通过AsyncDelegate特性获得add方法的委托
23             int result = del.EndInvoke(rd);//获取异步调用的结果,像其传入变量rd.
24             Console.WriteLine("result is:" + result);
25         }
26         public static int add(int num1, int nu2)
27         {
28             //为了演示,延迟执行,已模拟执行较长时间
29             System.Threading.Thread.Sleep(5000);
30             return num1 + nu2;
31         }
32     }

posted on 2012-07-19 12:36  面包机  阅读(339)  评论(1编辑  收藏  举报

导航