我不知道为什么会抛出System.ArgumentOutOfRangeException

时间:2019-09-13 10:25:04

标签: c# multithreading

我试图弄清楚为什么显示此错误,但我不能。我认为一切正常,但在某个时刻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();
                }
            }

1 个答案:

答案 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}}