所以,我正在尝试将参数传递给我想要参与多线程的方法。所以,我写的代码看起来像这样:
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
答案 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();