2017-11-10 11 views
4

小さなGUIアプリケーションのパフォーマンスを向上させるために、PowerShellでランスペースを使用して遊んでいます。Powershellの別のランスペースで実行されているWPFフォーム要素のメソッドを呼び出す方法

私が今までに持っているのは、2つの目的を持ったランスペースです。まず、他のすべてのランスペースを保持し、次に2番目のGUIファイルを解析して表示します。 また、ノードを同期化されたハッシュテーブルに追加するので、すべてのランスペースでアクセスできます。あなたが想像しているように、このGUIには、クリックされたときにアクションをトリガーするボタンがいくつかあります。かなりシンプルなもので、実際にはこれまでのところうまくいっています。私はランスペース間でデータを交換することができますし、特定のボタンがクリックされたときにGUIを更新することもできます。

しかし、xmlファイルの空のスタックパネル上でaddChild()メソッドを呼び出すことができません。私が基本的にしたいのは、スタックパネルにチェックボックスを追加することです( "CheckboxViewer"という名前)。

$checkbox = New-Object System.Windows.Controls.CheckBox 
$checkbox.Content = "Hello world" 
$syncHash.checkbox = $checkbox 
$syncHash.CheckboxViewer.Dispatcher.Invoke(
    [Action]{ 
     #this is working: 
     $syncHash.CheckboxViewer.Background = 'Black' 
     #this is not working 
     $syncHash.CheckboxViewer.AddChild($syncHash.checkbox) 
    }, "Normal") 

私はエラーメッセージが(ディスパッチャを使用せずに)直接、別の実行空間にアクセスしようとしたときに1が取得する一般的なエラーメッセージです:

例外(「1」引数を指定して「AddChildは」を呼び出しますS):。?!別のスレッドがそれを所有しているため、「呼び出し元のスレッドがこのオブジェクトにアクセスすることはできません

私がここで間違ってやっている何の助けの任意の種類ははるかに高く評価されるだろう任意のアイデア、感謝

+0

の内側にそれを宣言する必要がありますが、 '$ syncHash.CheckboxViewer.Children.Add($ syncHash.checkbox)'で試すことができますか?それが動作する場合、私はそれを答えとして追加します。 – Manu

+0

$ checkbox.Backgroundを直接使用することができます。 –

+0

@Manu - 残念ながら私には同じエラーメッセージが表示されます... – Quhalix89

答えて

1

これを試してみてください:

$syncHash.Window.Dispatcher.Invoke([action]{ 
    $checkbox = New-Object System.Windows.Controls.CheckBox 
    $checkbox.Content = "Hello world" 
    $syncHash.CheckboxViewer.AddChild($checkbox) 
}, "Normal") 

コントロールを追加するには、[action]

+0

Yehaa、ありがとう@Manu - それは魅力のように動作します:-) – Quhalix89

関連する問題