1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
using System; using System.Threading; namespace ConsoleApplication1 { class Program { private static AutoResetEvent[] events; static void Main( string [] args) { int threadNum = 10; Thread[] thread = new Thread[threadNum]; events = new AutoResetEvent[threadNum]; for ( int i = 0; i < threadNum; i++) { var waithandler = new AutoResetEvent( false ); events[i] = waithandler; ThreadStart starter = delegate { var param = new Tuple< string , AutoResetEvent>( "test print:" + i, waithandler); Print(param); }; thread[i] = new Thread(starter) { Name = "thread" + i.ToString() }; } for ( int i = 0; i < threadNum; i++) { thread[i].Start(); } WaitHandle.WaitAll(events); Console.WriteLine( "Completed!" ); Console.Read(); } private static void Print( object param) { var p = (Tuple< string , AutoResetEvent>)param; Console.WriteLine(Thread.CurrentThread.Name + ": Begin!" ); Console.WriteLine(Thread.CurrentThread.Name + ": Print" + p.Item1); Thread.Sleep(300); Console.WriteLine(Thread.CurrentThread.Name + ": End!" ); p.Item2.Set(); } } } |
一次性地Set,其实使用ManualResetEvent就足够了。
1234567891011121314151617181920212223242526272829303132333435363738 |
using System; using System.Collections.Generic; using System.Threading; namespace ConsoleApplication1 { class Program { static void Main( string [] args) { var waits = new List<EventWaitHandle>(); for ( int i = 0; i < 10; i++) { var handler = new ManualResetEvent( false ); waits.Add(handler); new Thread( new ParameterizedThreadStart(Print)) { Name = "thread" + i.ToString() }.Start( new Tuple< string , EventWaitHandle>( "test print:" + i, handler)); } WaitHandle.WaitAll(waits.ToArray()); Console.WriteLine( "Completed!" ); Console.Read(); } private static void Print( object param) { var p = (Tuple< string , EventWaitHandle>)param; Console.WriteLine(Thread.CurrentThread.Name + ": Begin!" ); Console.WriteLine(Thread.CurrentThread.Name + ": Print" + p.Item1); Thread.Sleep(300); Console.WriteLine(Thread.CurrentThread.Name + ": End!" ); p.Item2.Set(); } } } |
来自为知笔记(Wiz)