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();
}
}
}