C# 索引超出了c中Threadpool中数组的边界#

C# 索引超出了c中Threadpool中数组的边界#,c#,threadpool,C#,Threadpool,我在c#中使用线程池创建了一个简单的程序,同时将线程号作为参数传递,但得到了异常(运行时异常(第19行):索引超出了数组的边界) 使用系统; 使用系统线程; 使用System.Linq; 公共课程 { 私有常量字节TotalNoOfThread=10; 私有int[]已处理; 私有布尔[]已完成; 私有void ResetThread() { arrThreadRowProcessed=new int[TotalNoOfThread]; arrThreadRowIsCompleted=新bool

我在c#中使用线程池创建了一个简单的程序,同时将线程号作为参数传递,但得到了异常(运行时异常(第19行):索引超出了数组的边界)

使用系统;
使用系统线程;
使用System.Linq;
公共课程
{
私有常量字节TotalNoOfThread=10;
私有int[]已处理;
私有布尔[]已完成;
私有void ResetThread()
{
arrThreadRowProcessed=new int[TotalNoOfThread];
arrThreadRowIsCompleted=新bool[TotalNoOfThread];
}
私家车超速行驶(内部螺纹编号)
{
Console.WriteLine(“From THread=“+ThreadNo”);
arrThreadRowIsCompleted[ThreadNo]=true;//此点索引值的获取错误显示10,但如何
}
公众假期
{
重置线程();
Console.WriteLine(“重置数据…”);
for(inti=0;iTuroverDayWise(i));
}
while(arrThreadRowIsCompleted.Any(p=>!p))
{
《睡眠》(2000年);
}
}
公共静态void Main()
{
Program obj=新程序();
obj.TuroverDayWise();
}
}
在这行中

ThreadPool.QueueUserWorkItem(new WaitCallback(x=>TuroverDayWise(i)));
调用时使用的是i的当前值(在外部递增),而不是值。您可以尝试将i值保存在临时变量中,这应该可以:

        for (int i = 0; i < TotalNoOfThread; i++)
        {
            int local = i;
            ThreadPool.QueueUserWorkItem(new WaitCallback(x => TuroverDayWise(local)));
        }
for(inti=0;iTuroverDayWise(本地));
}

不清楚,你能解释一下吗?
        for (int i = 0; i < TotalNoOfThread; i++)
        {
            int local = i;
            ThreadPool.QueueUserWorkItem(new WaitCallback(x => TuroverDayWise(local)));
        }