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。这不起作用,错误与上面发布的相同。第二行没有抛出任何东西,第一行被激怒了改变你的围棋方法,成为这一行的目标