我试图将多个参数传递给线程。使用Lambda表达式将参数传递给线程
虽然我只用一个参数进行测试,但Lambda表达式并未正确传递参数的值。 ParameterizedThreadStart工作正常,但我可以只传递一个对象变量而不是更多,这限制了我。
我已经为每个做了一个示例,并且Lambda Expression方法输出的输出不正确。
对于这两种情况,numOfPortThreads = 2
使用ParameterizedThreadStart
public void InitializePorts(int numOfPortThreads)
{
Thread[] tPortArr = new Thread[numOfPortThreads];
for (int i = 0; i < numOfPortThreads; i++)
{
tPortArr[i] = new Thread(new ParameterizedThreadStart(new PortSim().PortRun));
tPortArr[i].Start(i);
}
}
在 “PortSim.cs”
public void PortRun(object portID)
{
portStopWatch.Start();
Console.WriteLine("This is Port {0}", portID);
Console.ReadKey();
}
在这种情况下的输出是:
这是端口0
这是端口1
然而,使用Lambda表达式,
public void InitializePorts(int numOfPortThreads)
{
Thread[] tPortArr = new Thread[numOfPortThreads];
for (int i = 0; i < numOfPortThreads; i++)
{
tPortArr[i] = new Thread(() => new PortSim().PortRun(i));
tPortArr[i].Start();
}
}
在 “PortSim.cs”
public void PortRun(int portID)
{
portStopWatch.Start();
Console.WriteLine("This is Port {0}", portID);
Console.ReadKey();
}
的在这种情况下的输出是:
这是端口2
这是端口2
什么是错的第二个例子吗?为什么会产生不正确的结果?
我发现这些线程的回答也是如此。如果可能,请关闭该问题。谢谢! –
已经关闭了问题。您可以随意使用帖子底部的_“删除”_链接自行删除它。 –