You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Task.Run调用带返回值异步函数时等待窗体GIF动图冻结如何解决

问题原因
  • 你之前无返回值的方案可以正常运行,核心是把业务逻辑通过Task.Run放到线程池线程执行,UI线程全程空闲可正常渲染GIF动画
  • 后续带返回值的写法直接在UI线程Await GetApiTwitterDatasAccount,如果该异步方法内部存在同步阻塞逻辑(比如请求参数构造、同步IO操作等),会直接占用UI线程,导致窗体无法刷新,GIF就会变成白色方块
解决方案

把带返回值的异步调用也包裹进Task.Run中即可,同时注意提前读取UI控件属性避免跨线程访问报错,修改后代码如下:

' 提前在UI线程读取控件属性,避免跨线程访问异常
Dim twitterId As String = Me.txtTwitterId.Text
Dim TwitterAccountToAdd As TwitterAccount

frmWaiting.Show()
TwitterAccountToAdd = Await Task.Run(Async Function()
    Return Await nsTweetInvi.CallTwitterApi.GetApiTwitterDatasAccount(twitterId)
End Function)
frmWaiting.Close()
补充说明
  • 该写法和你之前无返回值的实现逻辑完全一致,Task.Run会把整个异步逻辑调度到线程池执行,UI线程仅负责等待和刷新窗体,不会被阻塞
  • 如果后续遇到其他类似的异步调用导致UI卡顿的场景,都可以用相同的方式包裹处理

内容的提问来源于stack exchange,提问作者8oris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 07:12:04