【问题标题】:Index was outside the bounds of the array in Threadpool in c#索引超出了 c# 中 Threadpool 中的数组范围
【发布时间】:2021-01-23 08:43:07
【问题描述】:

我使用线程池在 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();
    }
}



【问题讨论】:

标签: c# threadpool


【解决方案1】:

在这一行……​​

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)));
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多