使用集合中的每个数据创建多个线程

本文关键字:数据 创建 线程 集合 | 更新日期: 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));