[英]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.