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

ContinueWith方法部分代码不执行:下载完成后无法关闭窗体及启动EXE

问题分析与解决

核心问题

你的代码在ContinueWith中执行窗体关闭和启动exe无响应,但弹窗正常,主要是线程上下文不匹配导致的:

  • Task.Run会在后台线程执行下载任务,默认ContinueWith也会在后台线程运行后续代码
  • 后台线程直接操作UI控件(比如关闭up进度窗体)会触发UI线程安全问题,可能导致代码卡壳,甚至后续的Process.Start也被阻塞

另外,ContinueWith中的异常会被Task对象吞噬,即使加了try/catch,也不会在主线程抛出,所以你看不到错误提示。

解决方案

方案1:指定ContinueWith在UI线程执行

通过TaskScheduler.FromCurrentSynchronizationContext()强制后续代码在UI线程运行,确保UI操作合法,同时保证Process.Start正常执行:

Dim downloadTask As Task = Task.Run(Function() blobmnger.downloadWithProgress("QGIS-OSGeo4W-3.16.7-1-Setup-x86_64.exe", "startupResources", utils, up))

' 指定在UI线程执行后续逻辑
downloadTask.ContinueWith(Sub(task)
                              If task.Status = TaskStatus.RanToCompletion Then
                                  ' UI线程安全操作窗体
                                  up.Close()
                                  Dim exePath = Path.Join(utils, "QGIS-OSGeo4W-3.16.7-1-Setup-x86_64.exe")
                                  Process.Start(exePath)
                              ElseIf task.IsFaulted Then
                                  ' 捕获任务异常,避免被吞噬
                                  MessageBox.Show($"下载失败:{task.Exception.InnerException.Message}")
                              End If
                          End Sub, TaskScheduler.FromCurrentSynchronizationContext())

方案2:使用Async/Await(更简洁推荐)

Async/Await会自动维护线程上下文,不需要手动指定调度器,代码更易读:

' 注意:所在方法需要标记为Async
Private Async Sub StartDownload()
    Try
        Await Task.Run(Function() blobmnger.downloadWithProgress("QGIS-OSGeo4W-3.16.7-1-Setup-x86_64.exe", "startupResources", utils, up))
        ' 下载完成后自动回到UI线程
        up.Close()
        Dim exePath = Path.Join(utils, "QGIS-OSGeo4W-3.16.7-1-Setup-x86_64.exe")
        Process.Start(exePath)
    Catch ex As Exception
        MessageBox.Show($"下载或启动失败:{ex.Message}")
    End Try
End Sub

额外排查点

  • 确认utils路径是绝对路径,避免Process.Start找不到文件
  • 检查下载的exe是否完整(可以对比文件大小或校验哈希)
  • 确保程序有足够权限启动exe(比如管理员权限,尤其是安装程序)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:12:48