以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 异步函数执行问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=150347) |
-- 作者:304376480 -- 发布时间:2020/5/27 17:35:00 -- 异步函数执行问题 老师您好!
有三段函数代码:函数A、函数B、函数C,在同一个按扭中,同时使用 AsyncExecute 方法异步执行, 函数C中的代码比较简单,如下: Dim DJBH As String = Args(0) \'追载 Dim id As Integer = DataTables("应收应付明细").Compute("Max(_Identify)")
DataTables("应收应付明细").AppendLoad("[_Identify] > " & id) \'\'重置 DataTables("应收应付明细").DataCols("客户ID").RaiseDataColChanged("单据编号 = \'" & DJBH & "\'") 问题:在 函数A 或 函数B 还没有执行完毕时,函数C无论同步执行还是异步执行,都会报错,
那么,要怎么知道 函数A 和 函数B 都执行完毕了,再开始执行 函数C 呢? (这个跟开发文档示例中的循环执行又是不同的)
|
-- 作者:有点蓝 -- 发布时间:2020/5/27 17:42:00 -- 调用同步函数,比如有全局变量a=0,函数A执行完毕调用同步函数,设置a=a+1,函数B执行完毕调用同步函数,设置a=a+1。函数A或者B执行完毕判断如果a=2,表示函数A和B都执行完毕了,调用函数C即可。 另外请仔细看看:http://www.foxtable.com/mobilehelp/topics/277.htm,不是什么代码都能在异步函数里使用的,想上面这种代码肯定就不行 |
-- 作者:304376480 -- 发布时间:2020/5/27 18:36:00 -- 下面这样的代码放在函数中异步调用,会有问题吗? Dim Tab As DataTable = Args(0)\'明细表 Dim DJBH As String = Args(1)\'单据编号 Dim Colname As String = Args(2)\'列名称 Dim DataTab As DataTable = DataTables("出入库明细") Dim JLh As DataRow = DataTables("经营记录").SQLFind("单据编号 = \'" & DJBH & "\'") Dim mxs As New List(Of DataRow) mxs = Tab.SQLSelect("单据编号 = \'" & DJBH & "\'") For Each mx As DataRow In mxs Dim CRnh As DataRow = DataTab.SQLAddNew() CRnh("单据编号") = DJBH CRnh("日期") = JLh("日期") CRnh("仓库") = JLh("仓库") CRnh("产品ID") = mx("商品ID") CRnh(Colname) = mx("数量") CRnh("入库日期") = Date.Now CRnh.Save() Next
|
-- 作者:chen37280600 -- 发布时间:2020/5/27 19:17:00 -- 你的想法,比较混乱,建议不要滥用异步··· |
-- 作者:304376480 -- 发布时间:2020/5/27 20:43:00 -- 有一个问题一直没有解决,处理十几行数据就有明显的卡顿感,没办法哦,使用异步处理会非常流畅,但在线程还没处理完的时候,点开其他操作就会弹出错误提示,不知道怎么处理,,,,? |
-- 作者:chen37280600 -- 发布时间:2020/5/27 21:09:00 -- 一般都是上千行或者上万才上异步。几十行都卡,你要说下具体处理什么,看下如何从思路上解决。有些时候,要多冗余字段,用空间换时间 |
-- 作者:有点蓝 -- 发布时间:2020/5/28 9:27:00 -- 3楼这种用法,还不如考虑直接使用sql进行更新 |