欢迎来到我的地盘:今天是

若得山花插满头,莫问奴归处!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
在学习异步前有必要讨论“我们为什么要了解异步”,也就是异步对我们编写程序有什么好处。现说说同步把,所谓同步就是按照程序编码的顺序执行,异步说的粗糙点就是不按照编码的顺序执行,我们什么时候需要进行异步编程呢--------如果我们遇到某个任务特别费时,由于下面执行的任务和上个任务无关,我们可以用异步执行(当然也可以用多线程);知道什么时候使用异步,那我们接下来开始学习异步编程吧。
       一,异步编程的步骤
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) 是从开始操作返回的,并且可用于获取有关异步开始操作是否已完成的状态。结果对象被传递到结束操作,该操作返回调用的最终返回值。在开始操作中可以提供可选的回调。如果提供回调,在调用结束后,将调用该回调;并且回调中的代码可以调用结束操作。

源代码:/Files/chinhr/code.rar

posted on 2007-12-20 17:21  莫问奴归处  阅读(302)  评论(0编辑  收藏  举报
轩轩娃