2011-12-29 153 views
0

我想为一个简单的方法启动一个新的线程,但该方法有我需要通过它的变量。C#线程启动错误

Thread tempmovethread = new Thread(new ThreadStart(widget.moveXYZINCHES(xval,yval,zval)); 

我收到错误:“方法名称预计”。

这是正确的方法的名字,我没有与此非常相似的代码更早一点的东西,它的工作,唯一的区别就是我所谓的方法之前didnt需要传递的任何变量:

executethread = new Thread(new ThreadStart(execute.RunRecipe)); 

是否有可能启动一个新线程并传递这样的变量,还是必须以另一种方式进行操作?

回答

3

使用操作来建立正确的委托类型

012。
Thread tempmovethreading = new Thread(new ThreadStart(new Action(() => widget.moveXYZINCHES(xval,yval,zval))); 
+0

的答案喜欢它,美丽! +1但会警告“访问修改的关闭”? – 2011-12-29 17:52:34

+0

谢谢你完美的作品! – kenetik 2011-12-29 17:55:34

3

tempmovethread =新主题(新ParametrizedThreadStart(widget.moveXYZINCHES); tempmovethread.Start(新[] {XVAL,利用yval,的zval});

BUT

你应该适当地改变这样的方法的签名(假设使用的参数都是int类型:

public void moveXYZINCHES(object state) 
{ 
    int xval = (state as int[])[0],yval = (state as int[])[1],zval = (state as int[])[2]; 
    ...your code 
} 
+0

好吧,我明白了第一部分,但在你的“but”声明之后,我得到了一点遗失......我不太熟悉C#中的命令,为什么我需要这样做? – kenetik 2011-12-29 17:49:41

+0

,因为ParametrizedThreadStart只接受具有特定参数集的函数 - 只有f(对象状态),因此您必须将参数包装到单个对象中以将它们传递到线程的函数中。但我真的很喜欢@Bob Vale的行动使用 – 2011-12-29 17:51:54