Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多线程时将参数传递给方法_C#_Multithreading_Methods - Fatal编程技术网

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

C# 多线程时将参数传递给方法,c#,multithreading,methods,C#,Multithreading,Methods,所以,我试图将一个参数传递给我想要参与多线程处理的方法。因此,我编写了如下代码: new Thread (Go(ineedthis)).Start(); Go(); static void Go(string ineedthis) { lock (locker) { if (!done) { Console.WriteLine ("Done"); done = true; } } } var t = new Thread (

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

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

  static void Go(string ineedthis)
  {
    lock (locker)
    {
      if (!done) { Console.WriteLine ("Done"); done = true; }
    }
  }
  var t = new Thread (Go); 
t.Start(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

我想你在寻找更像这样的东西:

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

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

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

我认为您正在寻找类似的内容:

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

  static void Go(string ineedthis)
  {
    lock (locker)
    {
      if (!done) { Console.WriteLine ("Done"); done = true; }
    }
  }
  var t = new Thread (Go); 
t.Start(ineedthis);
首先创建一个线程,详细说明在后台线程上运行时该方法将是什么。然后启动线程,根据需要传入任何参数。有关更多信息,请参阅。

您需要一个参数化的ThreadStart委托:

new Thread (Go).Start(ineedthis);
方法签名需要是object-inedthis,而不是string-inedthis:

您需要一个ParameterizedThreadStart委托:

new Thread (Go).Start(ineedthis);
方法签名需要是object-inedthis,而不是string-inedthis:

你可以用这个

Task.Factory.StartNew(() => Go("test"));
你可以用这个

Task.Factory.StartNew(() => Go("test"));
这也应该起作用:

new Thread (() => Go(ineedthis)).Start();
它将方法调用封装在可分配给ThreadStart的零参数lambda中。

这也应该起作用:

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

它将方法调用封装在可分配给ThreadStart的零参数lambda中。

您收到的错误消息是什么?可能与您收到的错误消息重复?可能与的重复不起作用,错误与上面发布的相同。第二行并没有抛出任何东西,第一行发生了错误,将您的Go方法更改为Goobject INEED。这不起作用,错误与上面发布的相同。第二行没有抛出任何东西,第一行被激怒了改变你的围棋方法,成为这一行的目标