首页 > 解决方案 > Powershell Invoke-WebRequest 在下载文件时冻结 UI

问题描述

我有一个简单的软件更新程序 PowerShell 脚本,它工作得很好,最近我决定在它上面添加一些 GUI,这样我就可以在下载文件时隐藏终端窗口,同时让用户知道它正在工作。

最终我想添加下载进度条以提供更多信息,但现在我的问题是当使用Invoke-WebRequest -Uri $printer_link -OutFile $save_path -PassThru 我的 UI 时会冻结,直到文件下载( 4-5MB )。我试着把它放在一个 JOB 里面

我的表格是:

$form  = New-Object System.Windows.Forms.Form
$form.Text = "POS Updater"
$form.Size = New-Object System.Drawing.Size(400,160)
$form.FormBorderStyle = "FixedDialog"
$form.TopMost = $true
$form.MaximizeBox = $false
$form.MinimizeBox = $false
$form.StartPosition="CenterScreen"
$form.Add_Shown({$form.Activate()})
$form.Add_Shown({check_connection})
[void] $form.ShowDialog()

和我的 check_connection 功能:

function check_connection{
  $s =  iwr "google.com" | select statuscode, statusdescription
  $code = $s.statuscode
  if($code -eq 200){

   Start-Job -Name "sx" -ScriptBlock{
     $download =  Invoke-WebRequest -Uri $printer_link -OutFile $save_path -PassThru
   }

   while (Get-Job | Where-Object {$_.HasMoreData}) {
      Get-Job | Receive-Job
      [System.Windows.Forms.Application]::DoEvents() 
      Start-Sleep -Seconds 1
   }   
  }
}

但是,它仍然冻结。请问我该如何解决这个问题。。

标签: powershellpowershell-5.0

解决方案


推荐阅读