class Program { static var are = new AutoResetEvent (false); static void Main() { var t1 = new Thread (Task); t1.Start(); Thread.Sleep (3000); are.Set(); //send a signal Console.WriteLine ("Main thread completed"); Console.Read(); } static void Task() { Console.WriteLine ("Waiting..."); are.WaitOne(); // Wait a signal Console.WriteLine ("Signal recived"); } }