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();
}
}
}