异步委托操作BeginInvoke和EndInvoke
BeginInvoke,有两个参数,一个调用方法的参数列表。
例如:
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是自自己定的。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步