如何在创建IN单据后执行Maj BFT动作且仅让Genbft延迟1000ms
解决方案
问题根源在于当前代码使用Task.Delay(1000).Wait()进行同步阻塞,会卡住UI线程,导致手动点击和自动运行「Maj BFT」动作时都受延迟影响。要实现仅手动触发该动作时延迟1000毫秒,自动运行时无延迟,可通过判断动作触发来源区分处理:
修改后的代码:
public PXAction<POReceipt> Genbft; [PXButton(CommitChanges = true)] [PXUIField(DisplayName = "Maj BFT", Enabled = true)] protected virtual async Task genbft() { // 仅在用户手动点击按钮时执行延迟 if (Base.Actions[typeof(Genbft)].PressedByUser) { await Task.Delay(1000); } // 这里添加「Maj BFT」动作原本的业务逻辑代码 }
关键说明:
- 把方法改为异步
async Task形式,替换同步阻塞的Wait(),避免UI线程卡顿 - 利用Acumatica的
PressedByUser属性判断动作触发方,自动运行场景下跳过延迟逻辑,不影响创建IN单据后的执行效率
内容的提问来源于stack exchange,提问作者Xavier LARTEM
相关产品推荐
相关产品推荐

