PowerShell:调用运行空间N次,并在完成后清理特定实例

时间:2018-07-19 13:36:32

标签: multithreading powershell runspace

我的脚本中有以下示例。我称相同的运行空间和相同的脚本块,但参数不同。目的是在响应式GUI中更新许多Windows窗体。

问题在于所有完成的实例都保留在内存中。如果我打电话太多,PowerShell将冻结。

是否有办法清理所有完成的实例并保留正在运行的实例? 在关闭脚本之前,如何强制删除所有实例?

$sync = [Hashtable]::Synchronized(@{})

$ScriptBlock = {
    $task = [PowerShell]::Create().AddScript({
        Param($var, $var2, $var...)
        # Do some stuff... Update $sync.data in many windows forms
        # .....
        # whe finish cleanup only this particular instance
    }).AddArgument($var1,$var2)

    $runspace = [RunspaceFactory]::CreateRunspace()
    $runspace.ApartmentState = "STA"
    $runspace.ThreadOptions = "ReuseThread"
    $runspace.Open()
    $runspace.SessionStateProxy.SetVariable("sync", $sync)

    $task.Runspace = $runspace
    $task.BeginInvoke()
}

$sync.data = $value

while (<#Condition true#>) {
    Invoke-Command -ScriptBlock $ScriptBlock -ArgumentList $var1, $var2
}

0 个答案:

没有答案