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 }
代码改变世界,记录知识.