首先,我必须指出,创建 100、150、255 等线程可能不是一个好主意。最好使用ThreadPool
orTask
类(如果使用 .NET 4.0)。除此之外,还有两种完善的方法可以等待所有线程完成。
加入线程。
Thread.Join
阻塞直到目标线程完成。
for (int i = 0; i < threadCount; i++)
{
Searcher src = new Searcher(i, this);
threads[i] = new Thread(new ThreadStart(src.getIpRange));
threads[i].Name = string.Format(i.ToString());
}
foreach (Thread t in threads)
{
t.Start();
}
foreach (Thread t in threads)
{
t.Join();
}
使用倒计时事件。
CountdownEvent一直等到其内部计数达到零。如果您想使用ThreadPool
. 如果您不使用 .NET 4.0,您可以在Joe Albahari 的网站上获得一个非常简单的实现。
var finished = new CountdownEvent(1);
for (int i = 0; i < threadCount; i++)
{
finished.AddCount();
Searcher src = new Searcher(i, this);
threads[i] = new Thread(
() =>
{
try
{
src.getIpRange();
}
finally
{
finished.Signal();
}
}
threads[i].Name = string.Format(i.ToString());
}
foreach (Thread t in threads)
{
t.Start();
}
finished.Signal();
finished.WaitOne();