Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2.  
  3. namespace Articulos.Cap04
  4. {
  5.     // Clase contenedora de los datos del evento tic,
  6.     // precisamente la hora:
  7.     public class HoraTicEventArgs : EventArgs
  8.     {
  9.         private DateTime hora;
  10.        
  11.         public DateTime Hora
  12.         {
  13.             set
  14.             {
  15.                 hora = value;
  16.             }
  17.             get
  18.             {
  19.                 return hora;
  20.             }
  21.         }
  22.     }
  23.    
  24.     public class Metronomo
  25.     {
  26.         //Delegado como marca por cada período del metrónomo:
  27.         public delegate void TicEventHandler(Metronomo m, HoraTicEventArgs e);
  28.        
  29.         // Evento que responde a cambios en la marca:
  30.         public event TicEventHandler Tic;
  31.        
  32.         // Inicia el conteo de marcas de período del metrónomo:    
  33.         public void Iniciar()
  34.         {
  35.             // Ciclo infinito para la actividad del metrónomo:
  36.             while (true)
  37.             {
  38.                 System.Threading.Thread.Sleep(2000);
  39.                
  40.                 if (Tic != null)
  41.                 {
  42.                     HoraTicEventArgs t = new HoraTicEventArgs();
  43.                    
  44.                     // Obtiene la hora actual:
  45.                     t.Hora = DateTime.Now;
  46.                    
  47.                     // Invoca a los métodos subscriptos:
  48.                     // this: Generador del evento.
  49.                     // e: Información del evento.
  50.                     Tic(this, t);
  51.                 }
  52.             }
  53.         }
  54.     }
  55.     // Subscribe o cliente de la clase publicadora `Metronomo`:
  56.     public class Subscriptor
  57.     {
  58.         // Se subscribe para detectar los cambios del metrónomo:
  59.         public void Subscribir(Metronomo m)
  60.         {
  61.             m.Tic += Accion;
  62.         }
  63.         // Acción que ocurre por cada cambio en el metrónomo:
  64.         public void Accion(Metronomo m, HoraTicEventArgs e)
  65.         {
  66.             Console.WriteLine("Tic a las {0}", e.Hora.ToString());
  67.         }
  68.     }
  69.    
  70.     public class Aplicacion
  71.     {
  72.         public static void Main()
  73.         {
  74.             // Instancia del broadcaster `Metronomo`:
  75.             Metronomo m = new Metronomo();
  76.            
  77.             // Subscriptor interesado en escuchar al `Metronomo`:
  78.             Subscriptor l = new Subscriptor();
  79.            
  80.             // Subscripción:
  81.             l.Subscribir(m);
  82.            
  83.             m.Iniciar();
  84.         }
  85.     }
  86. }