using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Threading; using System.IO; namespace ConsoleApplication1 { class CTask{ private static int s_nActiveTasks = 0; private static int s_nTaskNoSeed = 1; public int nTaskNO; public CTask() { nTaskNO = s_nTaskNoSeed++; } public void DoTask(object obj) { Interlocked.Increment(ref s_nActiveTasks); Console.WriteLine("Task: {0} Start", nTaskNO); for (int i=0;i<10;i++) { Console.Write("."); Thread.Sleep (100); } Console.WriteLine("Task:{0} End", nTaskNO); Interlocked.Decrement(ref s_nActiveTasks); } public static int ActiveTaskCount { get { return s_nActiveTasks; } } } class Program { static void Main(string[] args) { int nCount = 10; Thread[] arrThreads = new Thread[nCount]; for (int i = 0; i < nCount; i++) { Console.WriteLine("启动线程{0}.....", i); arrThreads[i] = new Thread(new ThreadStart(fnThreadTest)); arrThreads[i].Start(); } Console.WriteLine("线程启动完毕"); //等待所有工作运行结束 while (true) { int nWorker, nPort; ThreadPool.GetAvailableThreads(out nWorker, out nPort); Console.WriteLine("/r/n 主线程监视: 工作线程数:{0},活跃任务数:{1}",nWorker ,CTask.ActiveTaskCount); if (nWorker>0) break ; Thread.Sleep (1000); } Console.WriteLine("按任意键退出"); Console.Read(); } static void CreateTask() { //将任务加入线程池 ThreadPool.QueueUserWorkItem(new WaitCallback(new CTask().DoTask)); } static void fnThreadTest() { for (int i = 0; i < 100; i++) { CreateTask(); } } } }