等待函数退出,然后再继续在 PowerShell 中进行 foreach 循环

Wait for function to exit before continuing foreach loop in PowerShell

提问人:davidprogrammercdn 提问时间:11/17/2023 最后编辑:davidprogrammercdn 更新时间:11/17/2023 访问量:31

问:

我有一个在循环中被调用的函数列表。 有些在RunspacePool(多线程)中运行,而另一些则在主线程中运行。在主线程中运行的是带有按钮的表单。$listoffunctions

我需要在主线程(交互式表单)中运行的函数完成,然后才能继续使用列表中的其他函数进行 foreach 循环。

$listoffunctions包含函数名称的字符串,其参数有时如 and 和 。RichTextDocumentNewContext -ShowUseStoreOpenWith -HidePostActions

$WinAPIList包含函数名称列表,这些函数名称调用带有按钮(窗体 XAML 和按钮)的窗体,供用户与之交互。因此,它包含函数名称,如 和 。Foreach 循环应等待用户完全完成与此窗体的交互,并等待其后台命令完成。ScheduledTasks -DisableScheduledTasks -Enable

foreach ($singlefunction in $listoffunctions)
{
    # PowerShell
    $PowerShell = [PowerShell]::Create() 
    $PowerShell.RunspacePool = $RunspacePool
    
    # These functions run in main thread which names are found in WinAPIList
    if ($WinAPIList -contains $singlefunction){
        [void]$PowerShell.AddScript({Write-Output "Main Thread Run"})

        # This runs the function but I need it to wait for it to end before continue foreach loop   
        #$sb = [scriptblock]::Create($singlefunction)
        #& $sb
        
        # This does not work
        Start-Job -Name Job1 -ScriptBlock {$singlefunction}
        Wait-Job -Name Job1
        
    }
    # These function are run in the RunspacePool (Multithread)
    else{
        # Add script (function) to run

        [void]$PowerShell.AddScript($singlefunction)
    }
}

这是行不通的

# This does not work
Start-Job -Name Job1 -ScriptBlock {$singlefunction}
Wait-Job -Name Job1
PowerShell 函数 等待 退出 脚本块

评论


答: 暂无答案