Я работаю над графическим интерфейсом в PowerShell, где я выдавал ошибки при нажатии определенных комбо-боксов.
После того, как ошибка была выдана, я мог бы опустить список выпадающих списков и посмотреть его содержимое, но если бы я переключился на другой комбокс в том же сетевом представлении данных, я бы получил ту же первоначальную ошибку, прежде чем смог увидеть раскрывающийся список.
Я разместил это на форумах TechNet PowerShell и получил ответ, который мне был необходим для запуска моего графического интерфейса в однопоточной квартире (STA). PowerShell по умолчанию работает в MTA, но вы можете перезаписать это (в v2.0), используя переключатель -STA
при вызове powershell.exe
.
Однако мой графический интерфейс просто вызывает приложение PowerShell по умолчанию (в режиме MTA) , поэтому мой вопрос, есть ли способ программно установить состояние квартиры изнутри моего GUI / скрипта?
Если нет, то моей следующей попыткой будет определить состояние квартиры и попытаться повторно запустить мой графический интерфейс с начальной загрузки моего интерфейса с помощью чего-то вроде:
powershell.exe -STA myguiprog.ps1
Edit:
Так что мой обход работает:
if ([threading.thread]::CurrentThread.GetApartmentState() -eq "MTA") {
& $env:SystemRoot\system32\WindowsPowerShell\v1.0\powershell.exe -sta $MyInvocation.ScriptName
}