在线程开始内传递参数

时间:2014-01-15 03:09:38

标签: c# multithreading

是否可以在threadstart中传递一个参数来开始执行该方法?

int value = 123;
Thread t = new Thread(new ThreadStart(fail.DoWork(value)));


Class fail
{
  public void DoWork(int Value)
}

我还可以在DoWork中传递此参数吗?

4 个答案:

答案 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();