多线程时将参数传递给方法

时间:2012-07-10 19:05:54

标签: c# multithreading methods

所以,我正在尝试将参数传递给我想要参与多线程的方法。所以,我写的代码看起来像这样:

    new Thread (Go(ineedthis)).Start();
    Go();

  static void Go(string ineedthis)
  {
    lock (locker)
    {
      if (!done) { Console.WriteLine ("Done"); done = true; }
    }
  }

但是,我无法传递参数ineedthis,因为它会像我在第一行中那样插入错误。相反,如果在为方法创建线程时没有给出参数,它也会给出错误。

那么,在创建线程时如何将参数传递给方法?

谢谢! 注意:昨天我刚开始使用c#,所以我对此完全陌生。请解释一下,以便我从中获得更多!

编辑 - 错误:

Error   1   The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart)' has some invalid arguments     23  21  test


Error   2   Argument 1: cannot convert from 'method group' to 'System.Threading.ParameterizedThreadStart'   23  32  test

5 个答案:

答案 0 :(得分:3)

我认为你正在寻找更像这样的东西:

  var t = new Thread (Go); 
t.Start(ineedthis);

首先创建一个线程,详细说明在后台线程上运行时的方法。然后启动线程,根据需要传入任何参数。有关详细信息,请参阅MSDN

答案 1 :(得分:1)

您需要ParameterizedThreadStart代表:

new Thread (Go).Start(ineedthis);

且方法签名必须为object ineedthis,而不是string ineedthis

static void Go(object ineedthis)
{
  string data = (string)ineedthis;
  lock (locker)
  {
    if (!done) { Console.WriteLine ("Done"); done = true; }
  }
}

答案 2 :(得分:1)

您可以使用Task Parallel Library

Task.Factory.StartNew(() => Go("test"));

答案 3 :(得分:0)

这也应该有效:

new Thread (() => Go(ineedthis)).Start();

将方法调用包装在可赋值给ThreadStart的零参数lambda中。

答案 4 :(得分:0)

    Thread workerThread = new Thread (() => go("example"));
    workerThread.Start();