创建一个委托,并异步调用它,实际上是启动一个线程并在该线程中执行委托方法。*委托使用线程池来完成异步操作。

委托类Delegate 使用BeginInvoke()方法启动异步调用,并且返回一个IAsyncResult 对象。在启动线程中有以下三种方法等待

调用结束:

1. 检查IAsyncResult的IsCompleted属性,当调用没有完成时IsCompleted为false,否则为true。

2. 使用IAsyncResult的AsyncWaitHandle属性可以返回一个WaitHandle对象,WaitHandle的WaitOne方法可以设置一个

等待超时时间。

3.我们可以在异步调用的时候将一个异步回调委托传递给他,当委托的异步调用结束时会自动调用这个异步回调委托的方法。

AsyncCallback 委托定义了异步调用结束时掉用到方法。例如:

 1 public static Action<String> de;
 2     public static void RunSnippet()
 3     {
 4         de = new Action<String>(MyClass.funcation);
 5         de.BeginInvoke("异步调用启动",new AsyncCallback(Callback),"异步调用完成");
 6         Console.WriteLine("启动线程");
 7     }
 8     
 9     public static void funcation(String msg)
10     {
11         Console.WriteLine(msg);    
12         Thread.Sleep(2000);
13     }
14     
15     public static void Callback(IAsyncResult ar)
16     {
17         Console.WriteLine(ar.AsyncState);
18         de.EndInvoke(ar);
19     }

输出结果为

启动线程
异步调用启动
异步调用完成
 
 
posted on 2013-05-17 17:41  无尤  阅读(203)  评论(0编辑  收藏  举报