我有一个基本的脚本来生成Windows窗体。在此脚本中,应该触发和操作一个按钮。为了防止滞后,我想使用多个线程。
阅读了几本教程之后,我似乎仍然没有掌握它的基础知识。这是我点击按钮的功能:
Function Click ()
{
Get-Job | Remove-Job
$MaximumThreads = 4
For ($i=0;$i -lt 5; $i++)
{
$ScriptBlock =
{
Write-Host "Job started!"
}
While ($(Get-Job -state running).count -ge $MaximumThreads)
{
Write-Host "Wait"
Start-Sleep -Seconds 1
}
Start-Job -ScriptBlock $ScriptBlock
}
Write-Host "All jobs complete!"
}
我得到此输出:
Wait
Wait
Wait
Wait
Wait
Wait
All jobs complete!
Cancel
我期望的是,第一个线程开始堆积,直到达到“等待”条件之前的阈值为止。但是似乎乔布斯一开始就没有开始,这使我相信我缺少基本的东西...
有什么建议吗?谢谢!
我认为您必须将一会儿移到for循环之外。
Function Click()
{
Get-Job | Remove-Job
$MaximumThreads = 4
For ($i=0;$i -lt 5; $i++)
{
$ScriptBlock =
{
Write-Host "Job started!"
}
Start-Job -ScriptBlock $ScriptBlock
}
While ($(Get-Job -state running).count -ge $MaximumThreads)
{
Write-Host "Wait"
Start-Sleep -Seconds 1
}
Write-Host "All jobs complete!"
}