Format-Listの謎
Format-Listを実行するとスレッドが変わる?
以下は、ボタンを1個乗せたフォームを表示するサンプルです。
当たり前ですが、普通に動作します。
リスト1
[Void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object Windows.Forms.Form
$button = New-Object Windows.Forms.Button
$form.Controls.Add($button)
$form.ShowDialog()
ところが、以下を実行すると、フォームにボタンを追加する行($form.Controls.Add($button))でエラーが発生します。
検証
フォームとボタン両方に対してFormat-Listを実行してみるとどうでしょうか?
リスト3
[Void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$form = New-Object Windows.Forms.Form
$form | Format-List
$button = New-Object Windows.Forms.Button
$form.Controls.Add($button) # エラー
$button | Format-List
$form.Controls.Add($button) # 成功
フォームだけにFormat-Listを実行した場合はエラーが出ますが、ボタンにもFormat-Listを実行すると、エラーが発生しません。
仮説ですが、
Format-Listは自身専用のスレッドでオブジェクトの整形を行う。
その際、対象オブジェクトを自身のスレッドで再生成する。
・・・という事なのでしょうか?
情報求む!