start: System.Threading.RegisteredWaitHandle rhw = null; new Action(() => { for (var i = 0; i < 30; i++) { new Action<int>((index) => { System.Threading.Thread.Sleep(1000); Console.WriteLine(System.Threading.Thread.CurrentThread.Name + "执行完毕" + index); }).BeginInvoke(i, null, null); } }).BeginInvoke(null, null); rhw = System.Threading.ThreadPool.RegisterWaitForSingleObject(new System.Threading.AutoResetEvent(false), new System.Threading.WaitOrTimerCallback((obj, b) => { int workerThreads = 0; int maxWordThreads = 0; //int int compleThreads = 0; System.Threading.ThreadPool.GetAvailableThreads(out workerThreads, out compleThreads); System.Threading.ThreadPool.GetMaxThreads(out maxWordThreads, out compleThreads); //Console.WriteLine(workerThreads); //Console.WriteLine(maxWordThreads); //当可用的线数与池程池最大的线程相等时表示线程池中所有的线程已经完成 if (workerThreads == maxWordThreads) { //当执行此方法后CheckThreadPool将不再执行 rhw.Unregister(null); //此处加入所有线程完成后的处理代码 Console.WriteLine("f"); rhw = null; } }), null, 100, false); while (rhw != null) { } System.Threading.Thread.Sleep(10000) ; goto start; Console.WriteLine("finished");