线程C#中的重复参数

时间:2014-09-10 21:50:18

标签: c# multithreading

大家好我在线程中使用参数时遇到问题。问题是我将一个对象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++;
}

2 个答案:

答案 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++;
            }