1

所以,我试图将一个参数传递给我想要参与多线程的方法。所以,我写了如下代码:

    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
4

5 回答 5

3

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

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

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

于 2012-07-10T19:08:46.957 回答
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; }
  }
}
于 2012-07-10T19:11:02.390 回答
1

您可以为此使用任务并行库

Task.Factory.StartNew(() => Go("test"));
于 2012-07-10T19:14:58.170 回答
0
    Thread workerThread = new Thread (() => go("example"));
    workerThread.Start();
于 2014-03-19T21:10:19.947 回答
0

这也应该有效:

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

这将方法调用包装在一个可分配给 a 的零参数 lambda 中ThreadStart

于 2012-07-10T19:30:37.890 回答