Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
我想实现在内部函数A中执行异步执行10次函数B,然后在函数A等待10次函数B全部完成,才执行后续的代码,我参考下面的,是B中同步执行C函数,但是这有个问题,就是没办法回到A了,A里面有大量关联数据,参数,需要在后面去执行,这个有什么办法?
自动等待异步函数执行完毕
作为一个面向非专业人士的开发平台,Foxtable并未提供等待异步函数执行完毕的功能,实际开发过程中也少有此种需要发生。
如果你确实需要在全部异步函数执行完毕后,自动执行特定的代码,可以参考下面的代码。
继续以前面的异步累加为例:
1、定义Public变量
首先我们在全局代码中定义一个Public变量:
Public Total As Integer
Public TCount As Integer
我们在这里增加了一个计数器变量TCount。
2、定义同步函数
定义一个名为AddTotal的函数,其代码为:
Total = Total + Args(0)
TCount = TCount - 1
If Tcount = 0 Then
MessageBox.Show("计算完成,结果为:" & Total)
End If
这个函数将在异步函数中被同步调用,用于累加各异步函数产生的结果。
3、定义异步函数
然后定义一个名为AddSubtotal的函数,这个函数将在主线程中被异步调用,其代码为:
Dim Sum As Integer
For i As Integer = 1 To 100
Sum = Sum + 1
Next
Functions .BeginSyncExecute("AddTotal",Sum) '调用同步函数AddTotal累加结果
4、测试结果
然后在命令窗口执行代码:
Total = 0
TCount = 100
For i As Integer = 1 To TCount
Functions.AsyncExecute("AddSubtotal")
Next
原理很简单,TCount变量的初始值为100,表示异步函数要调用100次,每次异步函数(AddSubtotal)执行完毕后,都会调用同步函数(AddTotal),此函数每执行一次,就将TCount减1,当TCount的值等于0,表示所有的100个异步函数都执行完毕了。