Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#for循环中的多线程,如何检查所有线程的退出_C# - Fatal编程技术网

C#for循环中的多线程,如何检查所有线程的退出

C#for循环中的多线程,如何检查所有线程的退出,c#,C#,我试图通过一个线程对象调用一个方法,下面是代码 for (int i = 0; i < 255; i++) { Thread t = new Thread(new ParameterizedThreadStart(Pinger.Ping)); t.Start(i.ToString()); } for(int i=0;i

我试图通过一个线程对象调用一个方法,下面是代码

for (int i = 0; i < 255; i++)
{
    Thread t = new Thread(new ParameterizedThreadStart(Pinger.Ping));
    t.Start(i.ToString());      
}
for(int i=0;i<255;i++)
{
线程t=新线程(新的参数化线程启动(Pinger.Ping));
t、 开始(i.ToString());
}

如何检查每个线程是否都已完成?

首先,尽量避免创建这样的线程,因为应用程序将陷入混乱(内存、线程分配),手动管理线程可能很棘手

建议使用线程池为您管理/重用线程

请阅读以下官方文件:

回答你的问题,应该是这样的: (我没有测试代码)

var myTasks=new List();
对于(int i=0;i<255;i++)
{
添加(Task.Factory.StartNew(()=>Pinger.Ping(参数…)));
}
任务。WhenAll(我的任务);

您需要在创建的所有
硬盘上调用
Join()

List<Thread> threads = new List<Thread>();
for (int i = 0; i < 255; i++)
{
    Thread t = new Thread(new ParameterizedThreadStart(Pinger.Ping));
    threads.Add(t);
    t.Start(i.ToString());      
}

for (int i = 0; i < 255; i++)
   threads[i].Join();
List threads=newlist();
对于(int i=0;i<255;i++)
{
线程t=新线程(新的参数化线程启动(Pinger.Ping));
添加(t);
t、 开始(i.ToString());
}
对于(int i=0;i<255;i++)
线程[i].Join();

线程
s转换为
任务
s,然后
等待所有
/
当所有
时,另一种方法是将PLinq与
一起用于所有
如果可能,我宁愿使用
线程
,如果不使用,我将使用您的解决方案,方法的参数如何
Pinger.Ping
List<Thread> threads = new List<Thread>();
for (int i = 0; i < 255; i++)
{
    Thread t = new Thread(new ParameterizedThreadStart(Pinger.Ping));
    threads.Add(t);
    t.Start(i.ToString());      
}

for (int i = 0; i < 255; i++)
   threads[i].Join();