まず、100、150、255 などのスレッドを作成することは、おそらく良い考えではないことを指摘しなければなりません。ThreadPool
またはクラスを使用する方がよいTask
場合があります (.NET 4.0 を使用している場合)。それとは別に、すべてのスレッドが完了するまで待機するための確立された方法が 2 つあります。
スレッドに参加します。
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 を使用します。
CountdownEventは、内部カウントがゼロになるまで待機します。を使用する場合は、この方法が適していますThreadPool
。.NET 4.0 を使用していない場合は、Joe Albahari の Web サイトで非常に簡単な実装を入手できます。
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();