我试图弄清楚为什么显示此错误,但我不能。我认为一切正常,但在某个时刻readTest的值“ i”为==2。这不应该... listW有2个对象,而“ i”应仅为0和1。 t 2的来源。我做错什么了吗?我已经做了一些测试,而i = 2仅在readTest上发生。发生什么事了?
谢谢大家的关注
public void readTest(int i)
{
for (int j = 0; j != leftListList[i].getKeyValues().Length; j++)
{
string read = ws.Read(listW[i], wi[i].GetKey(), leftListList[i].getKeyValues()[j]);
WsRead wsRead = wi[i].BuildRead(read, leftListList[i].getKeyValues()[j]);
readList.Add(wsRead);
Console.WriteLine("READ: " + leftListList[i].getKeyValues()[j]);
}
}
public void threadTest()
{
for (int i = 0; i != listW.Length; i++)
{
Thread t = new Thread(() => readTest(i));
t.Start();
}
}
答案 0 :(得分:1)
引入一个 local 变量,例如index
:
for (int i = 0; i < listW.Length; i++) // i < listW.Length is more readable
{
int index = i;
...
else
{
// now each thread has its own index
Thread t = new Thread(() => readTest(index));
t.Start();
}
}
Thread
最终开始(需要花费时间创建新线程)时,循环已完成 ,因此{ {1}}