我寫了一個小腳本作為字幕進度條的測驗。問題是進度條凍結。此外,保存在$files變數中的檔案串列不會在最后顯示,而是在腳本完成后呼叫時顯示內容。任何見解都會有所幫助。
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$path = "C:\"
$window = New-Object Windows.Forms.Form
$window.Size = New-Object Drawing.Size @(400,200)
$window.StartPosition = "CenterScreen"
$window.Font = New-Object System.Drawing.Font("Calibri",11,[System.Drawing.FontStyle]::Bold)
$window.Text = "STARTING UP"
$ProgressBar1 = New-Object System.Windows.Forms.ProgressBar
$ProgressBar1.Location = New-Object System.Drawing.Point(10, 10)
$ProgressBar1.Size = New-Object System.Drawing.Size(365, 20)
$ProgressBar1.Style = "Marquee"
$ProgressBar1.MarqueeAnimationSpeed = 20
$ProgressBar1.UseWaitCursor = $true
$ProgressBar1.Visible = $false
$button = New-Object System.Windows.Forms.Button
$button.size = New-Object drawing.size @(50,50)
$button.Location = New-Object System.Drawing.Point(20, 70)
$button.Text = "TEST"
$window.Controls.add($button)
$button.add_Click(
{write-host "ASD"
$ProgressBar1.show()
start-job -name test -ScriptBlock {gci -File -Recurse "D:\" -ErrorAction SilentlyContinue|select Name}
Wait-job -Name test
$files = Receive-Job -Name test
$ProgressBar1.Hide()
Write-host "$files"
}
)
$window.Controls.Add($ProgressBar1)
$window.ShowDialog()
uj5u.com熱心網友回復:
正如我在評論中所述,使用Wait-Job會阻止您當前的執行緒,因此表單也將變得無回應。相反,您可以使用回圈while或do, 來等待您的作業并呼叫Application.DoEventsMethod作為解決方法:
$button.Add_Click({
$ProgressBar1.Show()
$this.Enabled = $false
$job = Start-Job -ScriptBlock {
Get-ChildItem -File -Recurse $HOME -ErrorAction SilentlyContinue
}
while($job.State -eq 'Running') {
[System.Windows.Forms.Application]::DoEvents()
}
$job | Receive-Job -AutoRemoveJob -Wait | Out-Host
$ProgressBar1.Hide()
$this.Enabled = $true
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/447846.html
上一篇:使用取消令牌取消多個任務
