Estoy trabajando en una GUI en PowerShell donde arrojaba errores cuando se hacía clic en ciertos cuadros combinados.¿Hay alguna manera de establecer programáticamente el ApartmentState en STA?
Después de que se produjo el error, podía soltar la lista de combobox y ver su contenido, pero si cambiaba a otra combox en la misma vista de tabla de datos, obtendría el mismo error inicial antes de poder ver la lista desplegable .
Publiqué esto en los foros de TechNet PowerShell y obtuve la respuesta que necesitaba para ejecutar mi GUI en un apartamento de una sola hebra (STA). PowerShell, de forma predeterminada, se ejecuta en MTA, pero puede sobrescribirlo (en v2.0) utilizando el interruptor -STA
al llamar al powershell.exe
.
Sin embargo, mi GUI simplemente invoca la aplicación predeterminada de PowerShell (en modo MTA) así que mi pregunta es, ¿hay alguna manera de establecer programáticamente el apartamiento de apartamentos desde dentro de mi GUI/script?
Si no es así, mi siguiente intento sería detectar el estado de apartamento y tratar de volver a tiro de mi interfaz gráfica de usuario de la carga inicial de mi interfaz gráfica de usuario con algo como:
powershell.exe -STA myguiprog.ps1
Editar:
Así que mi solución no trabajo:
if ([threading.thread]::CurrentThread.GetApartmentState() -eq "MTA") {
& $env:SystemRoot\system32\WindowsPowerShell\v1.0\powershell.exe -sta $MyInvocation.ScriptName
}
no es una respuesta directa interna de PowerShell, pero sí tiene una respuesta AN y, dado que usted es la única respuesta y estoy satisfecho con mi trabajo, ¡usted gana! = D gracias por la publicación stej! – thepip3r
Simplemente llame a 'Invoke-Appartment -expression {..}' para la parte de la GUI. Eso debería funcionar. – stej