【发布时间】:2017-08-03 08:23:49
【问题描述】:
我正在尝试将多个参数传递给线程。
虽然我只使用一个参数进行测试,但 Lambda 表达式没有正确传递参数的值。 ParameterizedThreadStart 工作正常,但我只能传递一个对象 变量而不能更多,这限制了我。
我为每一个都做了一个例子,而 Lambda 表达式方法输出的输出不正确。
对于这两种情况,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
第二个例子有什么问题?为什么会产生不正确的结果?
【问题讨论】:
-
我也在这些线程中找到了答案。如果可能,请关闭问题。谢谢!
-
问题已已关闭。您可以使用帖子底部的“删除”链接自行删除。
标签: c# multithreading lambda parameter-passing