主线程中使用了ThreadPool
for (int i = starti; i < pShapes.Count; i++)
{
ThreadPool.SetMaxThreads(20, 20);
WaitCallback w = new WaitCallback(AddExtremum);
ThreadPool.QueueUserWorkItem(w, i); }
如果让主线程挂起直到ThreadPool中的线程运行完毕
for (int i = starti; i < pShapes.Count; i++)
{
ThreadPool.SetMaxThreads(20, 20);
WaitCallback w = new WaitCallback(AddExtremum);
ThreadPool.QueueUserWorkItem(w, i); }
如果让主线程挂起直到ThreadPool中的线程运行完毕
{
static volatile bool flag = false;
static void Main(string[] args)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(
delegate(object p)
{
for (int i = 0; i < 5; i++)
{
Thread.Sleep(1000);
Console.WriteLine(i);
}
flag = true;
}));
while (!flag) ;
Console.WriteLine("Press Enter to end.");
Console.ReadLine();
}
}
{
//这里边加上ManulaResetEvent 类
manul.Reset();
.......
manul.Set();
}//然后主线程添加
manul.waitOne();
//子线程结束
你的程序只要flag为true,就会认为进程池中已经做完了