一,异步编程的步骤
1,建立与被调用方法相同签名的委托
假设被调用的方法为public void TestMethod(string p)
Public delegate void AsyncDelegate(string p);
2,把被调用的方法注册到委托实例
AsyncDelegate ad=new AsyncDelegate(TestMethod);
3,以begininvoke开始调用异步方法
IAsyncResult ar =Ad.BeginInvoke(string p,null,null)
4,继续做一些不需要异步调用结果的操作
//做一些其它操作
5,在需要异步调用方法结果的时候,察看异步调用方法执行的结果,并同步等待异步调用完成。
while(ar.IsCompleted == false)
{
Thread.Sleep(10);
}
Ad.EndBeginInvoke();
//继续操作
二,实例(附在后面)
三,在异步调用中使用IAsyncResult(表示异步操作的状态)和AsyncCallback(异步调用完成时执行回调方法)
1,建立与被调用方法相同签名的委托
假设被调用的方法为public void TestMethod(string p)
Public delegate void AsyncDelegate(string p);
2,把被调用的方法注册到委托实例
AsyncDelegate ad=new AsyncDelegate(TestMethod);
3,定义异步调用完成时执行的回调方法
Public void CallbackMethod(IAsyncResult ar)
4,以begininvoke开始调用异步方法
IAsyncResult ar =Ad.BeginInvoke(string p,new AsyncCallback(CallbackMethod),null)
5,继续做一些不需要异步调用结果的操作
//做一些其它操作
四,实例(附在后面)
五,总结“异步方法签名”
方法签名是参数类型在一个方法中的顺序。BeginInvoke 异步方法签名的规则是:
- 包括所有 IN 参数。
- 包括所有 OUT 参数。
- 包括所有 IN/OUT 参数。
- 包括所有 ByRef 参数。
- 将 AsyncCallback 和 AsyncState(可通过 IAsyncResult 接口的 AsyncState 属性获得)作为最后两个参数。
- 返回 IAsyncResult。
EndInvoke 异步方法签名的规则是:
- 包括所有 IN/OUT 参数。
- 包括所有 OUT 参数。
- 包括所有 ByRef 参数。
- 将 IAsyncResult 作为最后一个参数。
- 从原始方法签名返回原始返回类型。
结果对象 (IAsyncResult) 是从开始操作返回的,并且可用于获取有关异步开始操作是否已完成的状态。结果对象被传递到结束操作,该操作返回调用的最终返回值。在开始操作中可以提供可选的回调。如果提供回调,在调用结束后,将调用该回调;并且回调中的代码可以调用结束操作。