索引超出了 c# 中线程池中数组的范围

Index was outside the bounds of the array in Threadpool in c#

我使用线程池在 C# 中创建了一个简单的程序,同时将线程号作为参数传递,但出现异常(运行-time 异常(第 19 行):索引超出数组范围。 )

using System;
using System.Threading; 
using System.Linq;

public class Program
{
        private const byte TotalNoOfThread=10;
        private int[] arrThreadRowProcessed;
        private bool[] arrThreadRowIsCompleted;
        private void ResetThread()
        {
            arrThreadRowProcessed = new int[TotalNoOfThread];
            arrThreadRowIsCompleted = new bool[TotalNoOfThread];
        }
    
        private  void TuroverDayWise(int ThreadNo)
        {
            Console.WriteLine("From THread ="+ThreadNo);
            arrThreadRowIsCompleted[ThreadNo] = true; //Geting error on this point Index value show 10 but how
        }
        public void TuroverDayWise()
        {
            ResetThread();
            Console.WriteLine("Reset the Data..");
            for (int i = 0; i < TotalNoOfThread; i++)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(x=>TuroverDayWise(i)));
            }
            while (arrThreadRowIsCompleted.Any(p => !p))
            {
                Thread.Sleep(2000);                
            }

        }
    
    public static void Main()
    {
        Program obj= new Program();         
        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)));
        }