以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 自动等待异步函数执行请教 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=192045) |
-- 作者:z769036165 -- 发布时间:2024/5/25 19:22:00 -- 自动等待异步函数执行请教 我想实现在内部函数A中执行异步执行10次函数B,然后在函数A等待10次函数B全部完成,才执行后续的代码,我参考下面的,是B中同步执行C函数,但是这有个问题,就是没办法回到A了,A里面有大量关联数据,参数,需要在后面去执行,这个有什么办法? 自动等待异步函数执行完毕 作为一个面向非专业人士的开发平台,Foxtable并未提供等待异步函数执行完毕的功能,实际开发过程中也少有此种需要发生。 1、定义Public变量 首先我们在全局代码中定义一个Public变量: Public Total As Integer 2、定义同步函数 定义一个名为AddTotal的函数,其代码为: 这个函数将在异步函数中被同步调用,用于累加各异步函数产生的结果。 3、定义异步函数 然后定义一个名为AddSubtotal的函数,这个函数将在主线程中被异步调用,其代码为: Dim Sum As Integer 4、测试结果 然后在命令窗口执行代码: Total = 0 原理很简单,TCount变量的初始值为100,表示异步函数要调用100次,每次异步函数(AddSubtotal)执行完毕后,都会调用同步函数(AddTotal),此函数每执行一次,就将TCount减1,当TCount的值等于0,表示所有的100个异步函数都执行完毕了。 |
-- 作者:z769036165 -- 发布时间:2024/5/25 19:24:00 -- 目前想到就是在A函数用Do Loop 一直去循环检测TCount 是否等于 0,还有更好的办法吗? |
-- 作者:有点蓝 -- 发布时间:2024/5/26 19:42:00 -- 把函数A拆分为2个函数:函数A1、函数A2 函数A1调用异步,第10次函数B执行完毕后,调用同步函数的时候,在同步函数里调用函数A2
|
-- 作者:z769036165 -- 发布时间:2024/5/27 14:01:00 -- 但是A函数很多参数,那这样都得传递到异步函数里面,这样异步函数里面才能同步传到A2才行啊?这样大量循环,传很多参数实际在异步中不用的参数不会有影响? |
-- 作者:有点蓝 -- 发布时间:2024/5/27 14:08:00 -- 参数多少不是问题。要传递的什么参数,如果是异步不能使用的东西,比如直接传窗口控件,肯定是不行的,这种情况考虑把窗口名称和控件名称传递过去 |