我想为一个简单方法启动一个新线程,但该方法有我需要传递的变量。
Thread tempmovethread = new Thread(new ThreadStart(widget.moveXYZINCHES(xval,yval,zval));
我收到错误:“预期方法名称”。
这是正确的方法名称,我在早期的代码中做了一些非常类似的东西并且它起作用,唯一的区别是我之前调用的方法不需要传递任何变量:
executethread = new Thread(new ThreadStart(execute.RunRecipe));
是否可以启动一个新线程并传递这样的变量,或者我是否必须以另一种方式进行?
答案 0 :(得分:3)
tempmovethread = new Thread(new ParametrizedThreadStart(widget.moveXYZINCHES); tempmovethread.Start(new [] {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
}
答案 1 :(得分:3)
使用Action创建正确的委托类型。
Thread tempmovethreading = new Thread(new ThreadStart(new Action(() => widget.moveXYZINCHES(xval,yval,zval)));