using System; using System.Threading; class MainClass { private static void EventHandler(object state, bool timedout) { if (timedout) { Console.WriteLine("{0} : Wait timed out.", DateTime.Now.ToString("HH:mm:ss.ffff")); } else { Console.WriteLine("{0} : {1}", DateTime.Now.ToString("HH:mm:ss.ffff"), state); } } public static void Main() { AutoResetEvent autoEvent = new AutoResetEvent(false); string state = "AutoResetEvent signaled."; RegisteredWaitHandle handle = ThreadPool.RegisterWaitForSingleObject(autoEvent, EventHandler, state, 3000, false); while (Console.ReadLine().ToUpper() != "CANCEL") { autoEvent.Set(); } Console.WriteLine("Unregistering wait operation."); handle.Unregister(null); } }