C# 线程C中的重复参数#
大家好,我在线程中使用参数时遇到问题。问题在于,我将对象C# 线程C中的重复参数#,c#,multithreading,C#,Multithreading,大家好,我在线程中使用参数时遇到问题。问题在于,我将对象列表作为迭代列表(列表)的foreach循环中的线程数组的参数,有时它会复制参数(在将其放入线程之前,我已经检查了没有重复的对象)。我的代码是这样的。有人知道怎么回事吗?。提前谢谢 foreach (List<object> list2 in list1) { threads[i] = new Thread(() =>DoWork(list2, nRetorno)); threads[i].Name =
列表
作为迭代列表(列表
)的foreach循环中的线程数组的参数,有时它会复制参数(在将其放入线程之前,我已经检查了没有重复的对象)。我的代码是这样的。有人知道怎么回事吗?。提前谢谢
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++;
}
foreach(列表1中的列表2)
{
线程[i]=新线程(()=>DoWork(列表2,nRetorno));
线程[i].Name=“thread”+i;
线程[i].Start();
睡眠(5);
i++;
}
在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++;
}
foreach(列表1中的列表2)
{
var list=list2;
线程[i]=新线程(()=>DoWork(列表,nRetorno));
线程[i].Name=“thread”+i;
线程[i].Start();
睡眠(5);
i++;
}
您的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++;
}
foreach(列表1中的列表2)
{
列表3=列表2;
线程[i]=新线程(()=>DoWork(列表3,nRetorno));
线程[i].Name=“thread”+i;
线程[i].Start();
睡眠(5);
i++;
}
这篇文章与您的文章完全相同,示例代码几乎相同-。它涵盖了有关foreach
和闭包(与duplicate相同)的更多详细信息。感谢您的回答。。我以为我在线程方面犯了错误。。但这显然是主要问题。。谢谢你的回答谢谢你的回答