Skip to content

Instantly share code, notes, and snippets.

@Fhernd
Created June 5, 2014 17:29
Show Gist options
  • Save Fhernd/773bb43214b0cc9fbbf2 to your computer and use it in GitHub Desktop.
Save Fhernd/773bb43214b0cc9fbbf2 to your computer and use it in GitHub Desktop.
Demostración del uso del campo Empty de EventArgs en C#.
using System;
namespace Articulos.Cap04
{
internal class Contador
{
// Usamos el delegado incorporado en .NET para
// crear el evento de límite alcanzado:
public event EventHandler LimiteAlcanzadoEventHandler;
private int limite;
private int conteo;
public Contador(int limite)
{
this.limite = limite;
}
public void Contar(int x)
{
conteo += x;
if (conteo >= limite)
{
OnLimiteAlcanzado (EventArgs.Empty);
}
}
protected virtual void OnLimiteAlcanzado(EventArgs e)
{
// La creación de esta variable temporal nos servirá
// para asegurar colisiones en un ámbiente multihilo:
EventHandler tempEventHandler = LimiteAlcanzadoEventHandler;
// Probamos que en la pila de métodos asociados (listeners)
// haya por lo menos uno:
if ( tempEventHandler != null)
{
tempEventHandler (this, e);
}
}
}
internal class Aplicacion
{
public static void Main()
{
Console.WriteLine();
// Creamos una instancia de `Contador` y le pasamos
// un número aleatorio como argumento (límite):
Contador c = new Contador (new Random().Next(10));
// Establecemos método de escucha:
c.LimiteAlcanzadoEventHandler += LimiteAlcanzado;
// Se repite siempre y cuando pulsemos la tecla 'a':
while (Console.ReadKey(true).KeyChar == 'a')
{
Console.WriteLine("Incremento en 1");
c.Contar (1);
}
}
public static void LimiteAlcanzado(object sender, EventArgs e)
{
Console.WriteLine( "El límite ha sido alcanzado.\n");
Environment.Exit(0);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment