定义一个委托调用的方法:TakesAWhile
-
- private static int TakesAWhile(int data, int ms)
- {
- Console.WriteLine("开始...");
-
-
- Thread.Sleep(ms);
-
- Console.WriteLine("完成!");
-
- return ++data;
- }
定义一个委托:
- public delegate int TakesAWhileDelegate(int data, int ms);
以下是异步调用委托的3种方式:
1.投票
-
- TakesAWhileDelegate d1 = TakesAWhile;
-
- IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);
-
-
- while (!ar.IsCompleted)
- {
- Console.WriteLine(".");
-
-
- Thread.Sleep(500);
- }
-
-
- int result = d1.EndInvoke(ar);
-
- Console.WriteLine("结果:" + result);
- /*
2.等待句柄
-
- TakesAWhileDelegate d1 = TakesAWhile;
-
- IAsyncResult ar = d1.BeginInvoke(1, 3000, null, null);
-
- while (true)
- {
- Console.WriteLine(".");
-
-
-
- if (ar.AsyncWaitHandle.WaitOne(500, false))
- {
- Console.WriteLine("可获得结果啦Baby!");
-
- break;
- }
- }
-
-
- int result = d1.EndInvoke(ar);
-
- Console.WriteLine("结果:" + result);
-
3.异步回调
-
- private static void TakesAWhileCommpleted(IAsyncResult ar)
- {
- if (ar == null)
- {
- throw new ArgumentException("ar");
- }
-
- TakesAWhileDelegate d1 = ar.AsyncState as TakesAWhileDelegate;
-
- int result = d1.EndInvoke(ar);
- Console.WriteLine("结果:" + result);
- }
-
- TakesAWhileDelegate d1 = TakesAWhile;
-
- d1.BeginInvoke(1, 3000, TakesAWhileCommpleted, d1);
-
- for (int i = 0; i < 100; i++)
- {
- Console.WriteLine(".");
-
- Thread.Sleep(500);
- }
-
注:异步模式,不仅用于委托,异步模式在.NET Framework的各个地方都能见!