Powershell 2 で非モーダル Windows.Form/Dialog を作成する方法はありますか? フォームは関数内で作成し、手動で閉じるまで開いたままにする必要があります。ただし、関数の実行は継続する必要があります。スクリプトの実行が終了し、ユーザーが対話モードに戻った場合でも、フォームを開いたままにしておくことも可能です。
私はそのように試しましたが、開始ジョブでフォームを作成することすらできません。ただし、makeform を直接呼び出すと、期待どおりに機能します。
function makeform {
[void][reflection.assembly]::LoadWithPartialName("System.Windows.Forms")
[System.Windows.Forms.Application]::EnableVisualStyles();
$form = New-Object Windows.Forms.Form
$form.Text = 'Test Form'
$form.Add_Shown({$form.Activate()})
$form.ShowDialog()
}
function show {
start-job { makeform }
}
show # does show nothing :| (expected the form to appear)
start-job { makeform } -Name 'myjob' # expect the form to appear here - but it doesn't either :|
Write-Host "Cont..."
# simulate some long running task
[Threading.Thread]::Sleep(10000)
Wait-job myjob
Remove-job myjob
Write-Host "Done..."
Get-Job
重要な場合に備えて、(構成を介して) .NET 4 で Powershell 2 を実行しています。どうもありがとう!