如何调用在Powershell的另一个运行空间中运行的WPF表单元素的方法

如何调用在Powershell的另一个运行空间中运行的WPF表单元素的方法,wpf,powershell,xaml,runspace,Wpf,Powershell,Xaml,Runspace,我正在尝试在PowerShell中使用运行空间来提高小型GUI应用程序的性能 到目前为止,我得到的是一个运行空间,它有两个用途:第一,它保存所有其他运行空间,第二,它解析我的GUI xml文件并显示它。 它还将节点添加到同步哈希表中,因此我可以跨所有运行空间访问它。您可以想象,我在这个GUI中有一些按钮,当单击时会触发操作;非常简单的东西,事实上,到目前为止它工作得很好。我可以在运行空间之间交换数据,也可以在单击某个按钮时更新GUI 但是,我无法在xml文件中的空stackpanel上调用add

我正在尝试在PowerShell中使用运行空间来提高小型GUI应用程序的性能

到目前为止,我得到的是一个运行空间,它有两个用途:第一,它保存所有其他运行空间,第二,它解析我的GUI xml文件并显示它。 它还将节点添加到同步哈希表中,因此我可以跨所有运行空间访问它。您可以想象,我在这个GUI中有一些按钮,当单击时会触发操作;非常简单的东西,事实上,到目前为止它工作得很好。我可以在运行空间之间交换数据,也可以在单击某个按钮时更新GUI

但是,我无法在xml文件中的空stackpanel上调用addChild()方法。我基本上只想在stackpanel(名为“CheckboxViewer”)中添加复选框

我收到的错误消息是尝试直接访问另一个运行空间(不使用dispatcher)时收到的典型错误消息:

使用“1”参数调用“AddChild”时出现异常:“调用线程无法访问此对象,因为其他线程拥有它

你知道我做错了什么吗?非常感谢你的帮助,谢谢!

试试这个:

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

若要添加控件,必须在
[action]

中声明它。是否可以尝试使用
$syncHash.CheckboxViewer.Children.add($syncHash.checkbox)
?如果有效,我将添加它作为答案。您可以直接使用$checkbox。Background@Manu-不幸的是,这给了我相同的错误消息…@Ranadip Dutta:控件存储在同步哈希表中,因此需要
$syncHash.xxxx
,后台方法不是问题所在。原因是您无法调用c因为正如前面提到的,它在另一个模块中。你必须定义在这个模块中Yehaa,谢谢@Manu-就是这样,就像魅力一样工作:-)
$syncHash.Window.Dispatcher.Invoke([action]{
    $checkbox = New-Object System.Windows.Controls.CheckBox
    $checkbox.Content = "Hello world"
    $syncHash.CheckboxViewer.AddChild($checkbox)
}, "Normal")