使用集合中的每个数据创建多个线程
本文关键字:数据 创建 线程 集合 | 更新日期: 2023-09-27 18:05:07
问题在这里
我试图将当前变量值传递到线程中,是否有可能不通过创建一些文本或对象来欺骗它?
在代码中是这样的
List<Computer> students = new List<Computer>();
void main()
{
for(int i=0; i<students.Count; i++)
{
Thread thread = new Thread(new ThreadStart(() => Call(students[i])));
thread.Start();
}
}
void Call(Computer obj)
{
MessageBox.show(obj.Name);
Doconnect(obj.ip);
}
我试图用多个线程显示每个名称,所以应用程序不会花费很长时间连接也…
是有可能的。由于使用的是lambda,因此需要一个局部变量来避免闭包问题:
for(int i = 0; i < students.Count; i++)
{
var student = students[i];
Thread thread = new Thread(new ThreadStart(() => Call(student))); // use local
thread.Start();
}
也就是说,只使用框架类型会好得多,比如Parallel。ForEach:
Parallel.ForEach(students, s => Call(s));