RunSpacePool如何传递共享变量?

时间:2016-08-14 15:18:36

标签: c# powershell

我正在尝试创建一个将使用共享变量的线程(在主会话和线程之间)以及让线程能够使用主代码中的外部函数

我设法传递了要使用的线程的函数,并且我设法传递了只读变量。我的问题是,如果我在线程中更改变量的值,然后我尝试从主会话中读取它 - 我看不到值的变化,因此它不共享。

我该怎么做?我的目标是最终有一个线程。

这是我的代码:

private static String extractTag(String s) {
  String[] parts = s.split(" - ");
  if (parts.length > 1) {
    return s[0];
  }
  throw new IllegalArgumentException("Could not extract tag from '" + s + "'");
}

1 个答案:

答案 0 :(得分:1)

同步哈希表将满足您的需求:

# Sync'd hash table is accessible between threads
    $hash = [HashTable]::Synchronized(@{})
    $hash.Parameter = "Value"

有几种方法可以将它传递给新主题,我更喜欢简单的方法:

[PowerShell]$powershell = [PowerShell]::Create()
$powershell.AddScript({
    Param
    (
        $hash
    )
    # do stuff
}).AddParameter("hash", $hash)

$powershell.BeginInvoke()

您从任一线程对哈希表所做的任何操作都将对两个线程(以及您传递给它的任何其他线程)都是可访问的。

相关问题