using System; using System.Threading; namespace Recetas.CSharp.Cap04.R0408 { public sealed class UsoManualResetEvent { // Con una instancia de ManualResetEvent podemos // bloquear o liberar threads de forma manual: private static ManualResetEvent mre = new ManualResetEvent(false); public static void Main() { Console.WriteLine ("\nInicia la ejecución de 3 threads:"); for (int i = 0; i <= 2; ++i) { Thread t = new Thread (Proceso); t.Name = String.Format ("Thread No. {0}", i.ToString()); t.Start(); } Thread.Sleep (500); Console.WriteLine ("\nUna vez que todos los threadas se han iniciado, " + "presione Enter para invocar al método `Set`" + " para liberar todos los threads.\n"); Console.ReadLine (); mre.Set(); Thread.Sleep (500); } private static void Proceso() { string nombreThread = Thread.CurrentThread.Name; Console.WriteLine ("{0} ha iniciado su ejecución e invocado el método WaitOne().", nombreThread); mre.WaitOne (); Console.WriteLine ("El thread {0} ha finalizado.", nombreThread); } } }