using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace Threads{ class Program { static void Main(string[] args) { const int threadCount = 20; ManualResetEvent[] doneEvents = new ManualResetEvent[threadCount]; Console.WriteLine("invok-threads:{0}", DateTime.Now.ToString()); for (int i = 0; i < threadCount; i++) { doneEvents[i] = new ManualResetEvent(false); ThreadExample te =new ThreadExample (doneEvents[i]); ThreadPool.QueueUserWorkItem(te.AddData,i); } WaitHandle.WaitAll(doneEvents); Console.WriteLine("finsh-threads:{0}",DateTime.Now.ToString()); Console.ReadLine(); } } public class ThreadExample { private ManualResetEvent _doneEvent; public ThreadExample(ManualResetEvent doneEvent) { _doneEvent = doneEvent; } public void AddData(object threadContext) { int threadIndex = Convert.ToInt32(threadContext.ToString()); Console.WriteLine("thread:{0}-start", threadIndex); Thread.Sleep(20000); Console.WriteLine("thread:{0}-finsh", threadIndex); _doneEvent.Set(); Thread.CurrentThread.Abort(); } }}