Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我不知道';我不知道为什么';s正在抛出System.ArgumentOutOfRangeException_C#_Multithreading - Fatal编程技术网

C# 我不知道';我不知道为什么';s正在抛出System.ArgumentOutOfRangeException

C# 我不知道';我不知道为什么';s正在抛出System.ArgumentOutOfRangeException,c#,multithreading,C#,Multithreading,我想知道为什么会出现这个错误,但我不能。我认为一切都没问题,但在某个点上,readTest的值“I”是==2。这不应该。。。listW有2个对象,“i”应该仅为0和1。我不知道2是从哪里来的。我做错什么了吗?我做了一些测试,I=2只发生在readTest。发生了什么事 谢谢大家的关注 public void readTest(int i) { for (int j = 0; j != leftListList[i].getKeyValues().Lengt

我想知道为什么会出现这个错误,但我不能。我认为一切都没问题,但在某个点上,readTest的值“I”是==2。这不应该。。。listW有2个对象,“i”应该仅为0和1。我不知道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();
                }
            }
引入一个局部变量,例如
索引

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();
    }
}
for(int i=0;ireadTest(index));
t、 Start();
}
}

线程
最终启动时(创建一个新线程需要时间),循环完成,因此
i==2

您有一个野生的
否则
正在运行。查看
foreach
循环,它们会让您的代码更具可读性。天哪!非常感谢你!你是我的救星!