a. 一个客户端程序(client side program)要从后台数据库取回一个复杂的数据集合。可能这个数据库操作本身很费时,也可能是网络传输的数度比较慢,总之这个方法调用可能要花20秒时间。如果使用同步调用,那么在数据库结果返回之前,用户必须耐心等待,什么也不能做。这时候你可能会希望这个调用慢慢的在别处进行,程序马上返回好让你做其它的工作。等什么时候数据返回了,在进行其随后相应的操作。这种情形下,你就需要对数据库操作的方法进行异步调用。
dim ar as system.iasyncresult ar = delegate.begininvoke("class90",nothing, nothing) '*** 其它一些操作 。。。 '*** 检查后台调用状态 if (ar.iscompleted) then '*** 取回异步调用方法的结果 end if
如果后台调用已经结束,那么你就可以用代表的endinvoke来得到返回值。
dim students as string() students = delegate.endinvoke(ar)
'回调函数的参数 dim myvalue as integer = 10 '回调函数的定义 sub puttodesk(byval ar as iasyncresult) dim x as integer = cint(ar.asyncstate)'拿到参数 '相应的操作 end sub '使用回调函数的方法 private callbackdelegate as asynccallback = addressof puttodesk ... dim ar as system.iasyncresult ar = delegate.begininvoke("class90",callbackdelegate, myvalue)