索引超出了 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)));
}
我使用线程池在 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)));
}