using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace WaitOne { class Program { static AutoResetEvent autoEvent = new AutoResetEvent(false); static void Main(string[] args) { Console.WriteLine("Main starting."); ThreadPool.QueueUserWorkItem( new WaitCallback(WorkMethod), autoEvent); // Wait for work method to signal. autoEvent.WaitOne(); Console.WriteLine("Work method signaled. Main ending."); } static void WorkMethod(object stateInfo) { Console.WriteLine("Work starting."); // Simulate time spent working. Thread.Sleep(new Random().Next(100, 2000)); // Signal that work is finished. Console.WriteLine("Work ending."); ((AutoResetEvent)stateInfo).Set(); } } }