我正在使用PowerShell的圖形用戶界面,當某些組合框被點擊時,我正在拋出錯誤。有沒有辦法以編程方式將ApartmentState設置爲STA?
發生錯誤後,我可以放下組合框列表並查看它的內容,但是如果我在同一個datagridview上移動到另一個組合框,我會在看到下拉列表之前得到相同的初始錯誤。
我在TechNet PowerShell論壇上發佈了這個內容,並得到了在單線程單元(STA)中運行我的GUI所需的答案。默認情況下,PowerShell運行在MTA中,但您可以在撥打powershell.exe
時使用-STA
開關覆蓋此(在v2.0中)。
然而,我的GUI簡單地調用默認的PowerShell的應用程序(在MTA模式)所以我的問題是,是否有以編程方式從我的GUI /腳本的內部設置的ApartmentState的方法嗎?
如果不是這樣,我的下一個嘗試是檢測單元狀態,並試圖從我的GUI的初始加載重新開球我的GUI的東西,如:
powershell.exe -STA myguiprog.ps1
編輯:
所以我的變通辦法工作:
if ([threading.thread]::CurrentThread.GetApartmentState() -eq "MTA") {
& $env:SystemRoot\system32\WindowsPowerShell\v1.0\powershell.exe -sta $MyInvocation.ScriptName
}
這不是PowerShell內部的直接答案,但它確實有答案,因爲您是唯一的答案,我對我的解決方案感到滿意,您贏了! = D感謝post stej! – thepip3r 2011-06-16 18:35:39
只需爲GUI部分調用'Invoke-Appartment -expression {..}'。這應該工作。 – stej 2011-06-17 05:32:38