指数超出范围但指数并未真正超出范围

时间:2012-08-18 23:57:09

标签: c# .net multithreading list c#-4.0

我正在研究多线程程序,我想检查所有线程都已完成,然后我有一个全局List<bool> tr,当我创建一个新线程时,我向它添加false并在线程结束我通过将当前线程的bool列表中的索引传递给线程来使其成为true

这是我开始踏上它的循环:

for (int i = 0; i < t; i++)
{
    int n = int.Parse(r.ReadLine());
    List<int> nums = (from s in r.ReadLine().Split(' ') select int.Parse(s)).ToList();
    tr.Add(false);
    new Thread(() => Process(nums, i)).Start();
}

这是Process方法:

public static void Process(List<int> Data, int tNum)
{
    output.Add(ProcessSums(ProcessSubs(Data)).Distinct().Count());
    tr[tNum] = true;
}

问题出现在其中一个主题中,当tr[tNum] = true;运行它时会抛出ArgumentOutOfRangeException并说出Index was out of range.,但tr的长度为97 } index95。我不知道问题是什么,但我真的需要帮助。任何人都可以帮助我吗?!?

1 个答案:

答案 0 :(得分:1)

如果这不起作用,请只是评论,我会删除而不是将其标记下来,因为评论太多而且我没有测试,但我认为它真的像丹尼尔的评论一样简单

source

int i=0;
Parallel.For (0, t-1, i,=>
{
    int n = int.Parse(r.ReadLine());
    List<int> nums = (from s in r.ReadLine().Split(' ') select int.Parse(s)).ToList();
    Process(nums, i);
});