Powershell线程处理问题

Pet*_*aly 5 powershell powershell-2.0

我有一个powershell问题,也许有人可以帮助我.我正在使用PowerShell 2.0,我想创建并使用线程.我知道我可以使用工作,但这不是我想要的.我想要一个脚本,它创建Windows窗体,并运行后台线程.由于表单需要STA,这并不容易.运行"powershell.exe -sta"不是解决方案.

下面是我写的脚本,用于简单的线程处理.但它不起作用.即使是新的线程也不会被创建.有什么建议,有什么不对?如果可以,请你帮助我!

问候,彼得.

function ThreadProc() {
    for ($i = 0; $i -lt 10; $i++) {
        $ApartmentState = [System.Threading.Thread]::CurrentThread.GetApartmentState()
        Write-Host "ThreadProc ($ApartmentState): $i"
        # Yield the rest of the time slice.
        [System.Threading.Thread]::Sleep(0)
    }
}

$ApartmentState = [System.Threading.Thread]::CurrentThread.GetApartmentState()
Write-Host "Main thread ($ApartmentState): Start a second thread."

$thread_job = New-Object System.Threading.ThreadStart(ThreadProc)
$thread = New-Object System.Threading.Thread($thread_job)
$thread.CurrentThread.SetApartmentState([System.Threading.ApartmentState]::STA)
$thread.Start()

for ($i = 0; $i -lt 4; $i++) {
    Write-Host("Main thread: Do some work.")
    [System.Threading.Thread]::Sleep(0)
}

Write-Host("Main thread: Call Join(), to wait until ThreadProc ends.")
$thread.Join()
Write-Host("Main thread: ThreadProc.Join has returned. Program end.")
Run Code Online (Sandbox Code Playgroud)

JPB*_*anc 1

我认为你的问题与名为Powershell 和 Backgroundworker 的帖子很接近。Background worker 用于在后台线程上运行 .NET 代码。

尽管 Powershell 工作在 .NET 之上,但并不产生中间语言 (IL)。它是一种解释性语言,其代码无法在 powershell 运行空间的上下文之外运行。您也许可以使用代码创建我们自己的 PowerShell 运行空间并在其中运行脚本,并将结果编组回您的主会话。