Powershell中的线程

问题描述 投票:0回答:1

我有一个基本的脚本来生成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

我期望的是,第一个线程开始堆积,直到达到“等待”条件之前的阈值为止。但是似乎乔布斯一开始就没有开始,这使我相信我缺少基本的东西...

有什么建议吗?谢谢!

multithreading powershell jobs
1个回答
0
投票

我认为您必须将一会儿移到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!"
}
© www.soinside.com 2019 - 2024. All rights reserved.