我正在 PowerShell 中的 GUI 上工作,当单击某些组合框时我会抛出错误。
抛出错误后,我可以放下组合框列表并查看其内容,但如果我转移到同一个 datagridview 上的另一个组合框,我会在看到下拉列表之前得到相同的初始错误。
我在 TechNet PowerShell 论坛上发布了这个,并得到了我需要在单线程单元 (STA) 中运行我的 GUI 的答案。默认情况下,PowerShell 在 MTA 中运行,但您可以-STA
在调用powershell.exe
.
但是,我的 GUI 只是调用默认的 PowerShell 应用程序(在 MTA 模式下),所以我的问题是,有没有办法从我的 GUI/脚本内部以编程方式设置公寓状态?
如果没有,我的下一个尝试将是检测公寓状态并尝试从我的 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
}