static void Main(string[] args) { EventWaitHandle waitHandle = new ManualResetEvent(false); Worker worker1 = new Worker("Worker1", waitHandle); Worker worker2 = new Worker("Worker2", waitHandle); Console.WriteLine("press 'g' to start threads"); Console.WriteLine("Press 'p' to pause threads"); Console.WriteLine("Press 'q' to quit"); Thread.Sleep(2000); worker1.Start(); worker2.Start(); while(true) { ConsoleKey key = Console.ReadKey(true).Key; switch(key) { case ConsoleKey.G: Console.WriteLine("starting..."); waitHandle.Set(); break; case ConsoleKey.P: Console.WriteLine("pausing..."); waitHandle.Reset(); break; case ConsoleKey.Q: Console.WriteLine("quitting..."); worker1.Stop(); worker2.Stop(); return; default: break; } } }
static void Main(string[] args) { Semaphore waitHandle = new Semaphore(0, 5); Worker[] workers = new Worker[20]; for(int i = 0; i < workers.Length; i++) { workers[i] = new Worker("Worker" + i, waitHandle); } Console.WriteLine("press '1-5' to signal threads"); Console.WriteLine("Press 'q' to quit"); Thread.Sleep(2000); Array.ForEach(workers, w => w.Start()); while (true) { ConsoleKey key = Console.ReadKey(true).Key; switch (key) { case ConsoleKey.D1: case ConsoleKey.D2: case ConsoleKey.D3: case ConsoleKey.D4: case ConsoleKey.D5: Release(_consoleKeyMap[key], waitHandle); break; case ConsoleKey.Q: Console.WriteLine("quitting..."); Array.ForEach(workers, w => w.Stop()); waitHandle.Release(); return; default: break; } } }