using System; namespace Articulos.Cap04 { public class Metronomo { //Delegado como marca por cada período del metrónomo: public delegate void MarcadorEventHandler(Metronomo m, EventArgs e); // Evento que responde a cambios en la marca: public event MarcadorEventHandler Tic; public EventArgs e = null; // Inicia el conteo de marcas de período del metrónomo: public void IniciarMetronomo() { // Ciclo infinito para la actividad del metrónomo: while (true) { System.Threading.Thread.Sleep(2000); if (Tic != null) { // Invoca a los métodos subscriptos: // this: Generador del evento. // e: Información del evento. Tic(this, e); } } } } // Subscribe o cliente de la clase publicadora `Metronomo`: public class Subscriptor { // Se subscribe para detectar los cambios del metrónomo: public void Subscribir(Metronomo m) { m.Tic += new Metronomo.MarcadorEventHandler(Accion); } // Acción que ocurre por cada cambio en el metrónomo: private void Accion(Metronomo m, EventArgs e) { Console.WriteLine("Tic."); } } public class Aplicación { public static void Main() { // Instancia del broadcaster `Metronomo`: Metronomo m = new Metronomo(); // Subscriptor interesado en escuchar al `Metronomo`: Subscriptor l = new Subscriptor(); // Subscripción: l.Subscribir(m); m.IniciarMetronomo(); } } }