Как получить доступ к другому пространству выполнения powershell без WPF-объекта

T-Me спросил: 03 ноября 2018 в 08:34 в: multithreading

Я довольно много работал с пространствами выполнения PowerShell и знаю, что можно вызывать команды в другом пространстве выполнения с помощью диспетчера из объектов WPF.

Я создаю свои пространства выполнения следующим образом:

$global:A = [hashtable]::Synchronized(@{})
$global:initialSessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault()
# Add some functions to the ISS
$GuiRunspace =[runspacefactory]::CreateRunspace($initialSessionState)
$GuiRunspace.ApartmentState = "STA"
$GuiRunspace.Open()
$GuiRunspace.SessionStateProxy.SetVariable("A",$A)
$GuiRunspace.SessionStateProxy.SetVariable("B",$B) 
$GuiRunspace.Name = "GuiRunspace"$Gui = [powershell]::Create()
[void]$Gui.addscript($GUILayerScript)
$Gui.Runspace = $GuiRunspace
$GuiThread = $Gui.beginInvoke()

И с помощью следующего кода я могу манипулировать этим пространством выполнения из других пространств выполнения:

$A.Window.Dispatcher.invoke({ *Do some crazy stuff that has nothing to do with the object from which you called the dispatcher* })

Это работает только потому, что окно является объектом WPF, который имеет свойство диспетчера.

Вопрос в том, как вызвать команду в других пространствах выполнения без диспетчера WPF?


0 ответов