是否可以在threadstart中传递一个参数来开始执行该方法?
int value = 123;
Thread t = new Thread(new ThreadStart(fail.DoWork(value)));
Class fail
{
public void DoWork(int Value)
}
我还可以在DoWork中传递此参数吗?
答案 0 :(得分:2)
你可以尝试
int value = 123;
fail objfail = new fail();
var t = new Thread(() => objfail.DoWork(value));
t.Start();
答案 1 :(得分:1)
在这种情况下你需要ParameterizedThreadStart:
void Main()
{
Fail fail = new Fail();
int value = 123;
Thread t = new Thread(fail.DoWork); // same as: new Thread(new ParameterizedThreadStart(fail.DoWork));
t.Start(value);
}
public class Fail
{
public void DoWork(object value)
{
Console.WriteLine("value: {0}", value);
}
}
答案 2 :(得分:0)
我相信你也可以做lambda exssion之类的东西......
Thread t = new Thread(new ThreadStart( () => fail.DoWork(value)));
我花了一些时间来围绕lambda,但基本上上面发生的是这个。
调用没有参数的函数(正常调用可能有)。这由()表示。函数的实际定义是在>之后。用参数调用它。这与您完成以下操作相同。
currentMethodStartingTheThread()
{
Thread t = new Thread(new ThreadStart( CallAsParameterized() );
}
void CallAsParameterized()
{
int value = 123;
fail.DoWork(value);
}
Class fail
{
public void DoWork(int Value)
{ do whatever with the parameter value )
}
通过lambda表达式唯一真正的区别是您不必使用参数显式编写包装函数。
答案 3 :(得分:0)
我更喜欢这种语法:
int value = 123;
var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
t.Start();