繁体   English   中英

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

[英]Index was outside the bounds of the array in Threadpool in c#

我使用线程池在 c# 中创建了一个简单的程序,同时将线程号作为参数传递,但出现异常(运行时异常(第 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)));
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM