我必须将多个参数传递给一个线程。我把它们包装成了一个类对象。我希望在其中传递一个变量(双数组)作为参考(我期望在此变量中得到结果)。怎么可能?
class param
{
int offset = 0;
double[] v = null;
}
param p = new param();
p.v = new double[100]; // I want to pass this(v) variable by reference
p.offset = 50;
....
thread1.Start(p);
答案 0 :(得分:6)
有很多解决方案。一个是,您可以使用ParameterizedThreadStart
。
param p = new param();
// start the thread, and pass in your variable
Thread th = new Thread(new ParameterizedThreadStart(MyThreadMethod));
th.Start(p);
public void MyThreadMethod(object o)
{
// o is your param
param pv = (param)o;
}
答案 1 :(得分:3)
您也可以在声明线程时传递param
变量:
static void Main()
{
param p = new param();
p.v = new double[100]; // I want to pass this(v) variable as reference
p.offset = 50;
Thread t = new Thread ( () => MyThreadMethod(p) );
t.Start();
}
static void MyThreadMethod(param p)
{
//do something with p
Console.WriteLine(p.v.Length);
Console.WriteLine(p.offset);
}
查看Joseph Albahari关于线程here的免费电子书。
我喜欢这种方法,因为你不需要处理其他对象 - 只需在你的Thread构造函数中创建一个lambda,然后你即可参加比赛。
希望这有帮助!
答案 2 :(得分:0)
您将如何做到这一点:
static void Main(string[] args)
{
int offset = 0;
double[] v = null;
//Put your values into a single object
object o = new object[] { offset, v };
Thread thread1 = new Thread(new ParameterizedThreadStart(myMethod));
thread1.Start(o);
}
public static void myMethod(object sender)
{
//Do something
}
答案 3 :(得分:0)
由于线程正在访问p
的成员,p
本身不需要通过引用传递。仅当线程使用p
将新对象分配到p = new MyParams();
时,您才需要将p
作为参考传递。