我正在研究多线程程序,我想检查所有线程是否都已完成,然后我有一个全局List<bool> tr
线程,当我创建一个新线程时,我false
向它添加一个,并在线程结束时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
并说 the Index was out of range.
but the length of tr
is97
和 the index
is 95
。我不知道问题是什么,但我真的需要帮助。有谁能够帮我?!?