大家好我在线程中使用参数时遇到问题。问题是我将一个对象List<object>
作为一个线程数组的参数,在一个foreach循环中迭代一个列表(List<List<Object>>
),有时它会复制参数(我已经检查过了我把它放在一个线程之前不是一个重复的对象)。我的代码是这样的。有谁知道出了什么问题?提前致谢
foreach (List<object> list2 in list1)
{
threads[i] = new Thread(() =>DoWork(list2, nRetorno));
threads[i].Name = "thread " + i;
threads[i].Start();
Thread.Sleep(5);
i++;
}
答案 0 :(得分:0)
在C#中有一些与foreach一起使用的奇怪行为,尝试使用引用变量而不是像foreach那样:
foreach (List<object> list2 in list1)
{
var list = list2;
threads[i] = new Thread(() =>DoWork(list, nRetorno));
threads[i].Name = "thread " + i;
threads[i].Start();
Thread.Sleep(5);
i++;
}
答案 1 :(得分:0)
您的lambda正在捕获list2
变量而不是值。首先将其复制到本地:
foreach (List<object> list2 in list1)
{
List<object> list3 = list2;
threads[i] = new Thread(() =>DoWork(list3, nRetorno));
threads[i].Name = "thread " + i;
threads[i].Start();
Thread.Sleep(5);
i++;
}