using System;
using System.Threading;
namespace Recetas.CSharp.Cap04.R0408
{
public sealed class UsoAutoResetEvent
{
// Crea instancia de EventResetEvent pasando false
// al argumento. Esto evita que automáticamente se invoque
// el método `Set`:
static EventWaitHandle waitHandle = new AutoResetEvent (false);
public static void Main()
{
new Thread (ProcesoEspera).Start ();
Thread.Sleep (1500);
// Activa la señal o notificación:
waitHandle.Set();
}
static void ProcesoEspera()
{
Console.WriteLine ("\nMétodo `ProcesoEspera` en espera...");
waitHandle.WaitOne(); // A espera de notificación
Console.WriteLine ("Método `ProcesoEspera` notificado...");
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nOwoKbmFtZXNwYWNlIFJlY2V0YXMuQ1NoYXJwLkNhcDA0LlIwNDA4CnsKICAgIHB1YmxpYyBzZWFsZWQgY2xhc3MgVXNvQXV0b1Jlc2V0RXZlbnQKICAgIHsKICAgICAgICAvLyBDcmVhIGluc3RhbmNpYSBkZSBFdmVudFJlc2V0RXZlbnQgcGFzYW5kbyBmYWxzZSAKICAgICAgICAvLyBhbCBhcmd1bWVudG8uIEVzdG8gZXZpdGEgcXVlIGF1dG9tw6F0aWNhbWVudGUgc2UgaW52b3F1ZSAKICAgICAgICAvLyBlbCBtw6l0b2RvIGBTZXRgOgogICAgICAgIHN0YXRpYyBFdmVudFdhaXRIYW5kbGUgd2FpdEhhbmRsZSA9IG5ldyBBdXRvUmVzZXRFdmVudCAoZmFsc2UpOwogICAgICAgIAogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICB7CiAgICAgICAgICAgIG5ldyBUaHJlYWQgKFByb2Nlc29Fc3BlcmEpLlN0YXJ0ICgpOwogICAgICAgICAgICBUaHJlYWQuU2xlZXAgKDE1MDApOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gQWN0aXZhIGxhIHNlw7FhbCBvIG5vdGlmaWNhY2nDs246CiAgICAgICAgICAgIHdhaXRIYW5kbGUuU2V0KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0YXRpYyB2b2lkIFByb2Nlc29Fc3BlcmEoKQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUgKCJcbk3DqXRvZG8gYFByb2Nlc29Fc3BlcmFgIGVuIGVzcGVyYS4uLiIpOwogICAgICAgICAgICB3YWl0SGFuZGxlLldhaXRPbmUoKTsgICAgLy8gQSBlc3BlcmEgZGUgbm90aWZpY2FjacOzbgogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSAoIk3DqXRvZG8gYFByb2Nlc29Fc3BlcmFgIG5vdGlmaWNhZG8uLi4iKTsKICAgICAgICB9CiAgICB9Cn0=