特定のコンボボックスがクリックされたときにエラーをスローしていたPowerShellのGUIで作業しています。
エラーがスローされた後、コンボボックスリストをドロップダウンしてその内容を確認できましたが、同じdatagridviewで別のコンボボックスに移動すると、ドロップダウンリストが表示される前に同じ初期エラーが発生しました。
これをTechNetPowerShellフォーラムに投稿し、GUIをシングルスレッドアパートメント(STA)で実行するために必要な回答を得ました。PowerShellは、デフォルトではMTAで実行されますが、を-STA
呼び出すときにスイッチを使用することで、これを(v2.0では)上書きできますpowershell.exe
。
ただし、私のGUIは(MTAモードで)デフォルトのPowerShellアプリケーションを呼び出すだけなので、私の質問は、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
}