我正在使用PowerShell开发一个GUI界面,在某些组合框被点击时会出现错误。当错误出现后,我可以展开组合框列表并查看其内容,但如果我转移到同一数据网格视图上的另一个组合框,则在看到下拉列表之前会再次出现相同的初始错误。
我在TechNet PowerShell论坛上发布了这个问题,并得到了答案:我需要在单线程公寓(STA)中运行我的GUI。默认情况下,PowerShell在MTA模式下运行,但您可以通过在调用powershell.exe时使用“-STA”开关来覆盖此设置(在v2.0中)。
然而,我的GUI只是调用默认的PowerShell应用程序(以MTA模式),所以我的问题是,是否有一种方法可以从我的GUI/脚本内部编程设置公寓状态?
如果没有,我的下一步尝试将是检测公寓状态并尝试重新启动我的GUI。例如:
我在TechNet PowerShell论坛上发布了这个问题,并得到了答案:我需要在单线程公寓(STA)中运行我的GUI。默认情况下,PowerShell在MTA模式下运行,但您可以通过在调用powershell.exe时使用“-STA”开关来覆盖此设置(在v2.0中)。
然而,我的GUI只是调用默认的PowerShell应用程序(以MTA模式),所以我的问题是,是否有一种方法可以从我的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
}
Invoke-Appartment -expression {..}
来处理 GUI 部分。那应该可以工作。 - stej