我不太喜欢多线程编程,当我试图在我的代码中实现它时,遇到了一个我无法弄清楚原因的异常。在这方面的任何帮助将不胜感激:)
所以,基本上我有这么一小段代码:
string[][] Array1 = new string[thread_count][];
/* Logic to insert data in Array1 */
Thread[] WorkerThreads = new Thread[thread_count];
for (int i = 0; i < thread_count; i++)
{
/* THE EXCEPTION OCCURS IN THE FOLLOWING LINE */
WorkerThreads[i] = new Thread(() => GetVal(Array1[i], val, num));
WorkerThreads[i].Start();
}
for (int i = 0; i < WorkerThreads.Length; i++)
WorkerThreads[i].Join();
现在,thread_count 的值设置为 10,我收到了一个 IndexOutOfRange 异常。调试器将 i 的值显示为 10,Array1[10][] 是它试图访问的值。
当循环不应该运行那么远时,我不知道 i 的值如何达到 10。
谁能指出我哪里出错了?我正在使用 C#。
谢谢
最佳答案
你有“关闭循环变量”的问题,检查这个:closing over the loop variable considered harmful和 The foreach identifier and closures .
添加一个临时变量来修复它:
for (int i = 0; i < thread_count; i++)
{
var j = i;
/* THE EXCEPTION OCCURS IN THE FOLLOWING LINE */
WorkerThreads[j] = new Thread(() => GetVal(Array1[j], val, num));
WorkerThreads[j].Start();
}
关于c# - 多线程程序中的 IndexOutOfRange 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18071384/