gpt4 book ai didi

Powershell线程处理问题

转载 作者:行者123 更新时间:2023-12-04 19:17:40 25 4
gpt4 key购买 nike

我有一个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.")

最佳答案

注意到你的脚本中有几个错误。首先 $thread_job,试试这个:

[System.Threading.ThreadStart]$thread_job = {ThreadProc};

您需要将括号放在 ThreadProc 周围,否则它将被评估而不是作为函数传递。其次,您只需指定委托(delegate)的类型,如 ThreadStart 和 PowerShell 将为您转换内容;不需要新对象。

其次 CurrentThread 是一个静态成员 - 我猜 $thread.CurrentThread 是一个错字,你的意思是:
$thread.SetApartmentState([System.Threading.ApartmentState]::STA);

我想你仍然会遇到问题让它工作 - 每当我尝试在 PowerShell 中使用线程之前,我总是遇到令人讨厌的崩溃而没有真正的解释......

你可以用 C# 编写一个 cmdlet 并调用它吗?这样做可能更容易 - 你可以设置一个新的运行空间并在另一个运行空间的线程中运行你的命令。

编辑

找到这些可能对您有帮助的链接:

http://weblogs.asp.net/adweigert/archive/2008/04/29/powershell-threading-for-powershell-v1-0.aspx
http://blogs.msdn.com/b/powershell/archive/2007/03/23/thread-apartmentstate-and-powershell-execution-thread.aspx

关于Powershell线程处理问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com