C#(2005)异步委托操作

实现异步委托,主要是调用委托对象上的两个方法BeginInvoke和EndInvoke

BeginInvoke,有两个参数,一个调用方法的参数列表。

例如:

delegate int TestDelegate(int i);
int Add(int i)
{
	
}
TestDelegate td=new TestDelegate(Add);
td.BeginInvoke(1/*params*/,null,null);

代码中 1 就是参数列表了,数量可以是0-N,数量对应方法的参数个数!

列表参数之后就是第一个参数AsyncCallback callback,这个参数也许也是个委托吧!如果方法执行完毕。就调用callback的方法执行后续。这个可为null

第三个参数是Object asyncState,如果第二个参数不用,也就不用了,直接null,如果第二个参数有,通常就传这个委托对象过去。因为MSDN上说这样方便在callback中调用EndInvoke;

 

EndInvoke,有一个参数列表,一个参数

参数列表是,由于调用既方法,有ref 或者out参数,才需要的。

另一个参数是IAsyncResult类型,MSDN用几个字描述了:表示异步操作的状态。

还有就是MSDN声明了一个要点就是

每次都要调用 EndInvoke 来完成异步调用。

调用的大概流程就是

第一步:IAsyncResult result =xyzdelegate.BeginInvoke(a,null,null) (个人认为,如果有callback就不用result了,不过未经证实)

第二步:有两种方法知道呢个异步调用既完成

(1)result.AsyncWaitHandle.WaitOne();这个会一直等,等到真是完成!才会执行下一行代码!

(2)

while(result.IsCompleted == false){

     呢度你做咩野无人理,当然调用既方法还在执行!

}

第三步object return_value=xyzdelegate.EndInvoke(result);其中object 可以改为函数的返回类型。

如果用到AsyncCallback则要再定义一个函数:

void funtion_name(IAsyncResult result)

那样

EndInvoke就中这个Callback函数中执行,当然代码你要自已写.至于调用EndInvoke的对象就是(xyzdelegate)result.AsyncState

ps:这个xyzdelegate是自自己定的。

这篇是为了加深自已的认识。看不明白的就不要骂我!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值