Leer en inglés

Compartir a través de


EventHandler Delegado

Definición

Representa el método que controlará un evento que no tiene datos de evento.

C#
public delegate void EventHandler(object sender, EventArgs e);
C#
public delegate void EventHandler(object? sender, EventArgs e);
C#
[System.Serializable]
public delegate void EventHandler(object sender, EventArgs e);
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);

Parámetros

sender
Object

Origen del evento.

e
EventArgs

Objeto que no contiene datos de evento.

Atributos

Ejemplos

En el ejemplo siguiente se muestra un evento denominado ThresholdReached asociado a un EventHandler delegado. Se llama al método asignado al EventHandler delegado en el OnThresholdReached método .

C#
using System;

namespace ConsoleApplication3
{
    public class Program3
    {
        public static void Main()
        {
            Counter c = new(new Random().Next(10));
            c.ThresholdReached += c_ThresholdReached;

            Console.WriteLine("press 'a' key to increase total");
            while (Console.ReadKey(true).KeyChar == 'a')
            {
                Console.WriteLine("adding one");
                c.Add(1);
            }
        }

        static void c_ThresholdReached(object? sender, ThresholdReachedEventArgs e)
        {
            Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold,  e.TimeReached);
            Environment.Exit(0);
        }
    }

    class Counter
    {
        private readonly int _threshold;
        private int _total;

        public Counter(int passedThreshold)
        {
            _threshold = passedThreshold;
        }

        public void Add(int x)
        {
            _total += x;
            if (_total >= _threshold)
            {
                ThresholdReachedEventArgs args = new()
                {
                    Threshold = _threshold,
                    TimeReached = DateTime.Now
                };
                OnThresholdReached(args);
            }
        }

        protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
        {
            ThresholdReached?.Invoke(this, e);
        }

        public event EventHandler<ThresholdReachedEventArgs>? ThresholdReached;
    }

    public class ThresholdReachedEventArgs : EventArgs
    {
        public int Threshold { get; set; }
        public DateTime TimeReached { get; set; }
    }
}

Comentarios

El modelo de eventos de .NET Framework se basa en tener un delegado de eventos que conecta un evento con su controlador. Para generar un evento, se necesitan dos elementos:

  • Delegado que identifica el método que proporciona la respuesta al evento.

  • Opcionalmente, una clase que contiene los datos del evento, si el evento proporciona datos.

El delegado es un tipo que define una firma, es decir, el tipo de valor devuelto y los tipos de lista de parámetros de un método. Puede usar el tipo de delegado para declarar una variable que pueda hacer referencia a cualquier método con la misma firma que el delegado.

La firma estándar de un delegado de controlador de eventos define un método que no devuelve un valor. El primer parámetro de este método es de tipo Object y hace referencia a la instancia que genera el evento. Su segundo parámetro se deriva del tipo EventArgs y contiene los datos del evento. Si el evento no genera datos de eventos, el segundo parámetro es simplemente el valor del EventArgs.Empty campo. De lo contrario, el segundo parámetro es un tipo derivado de EventArgs y proporciona los campos o propiedades necesarios para contener los datos del evento.

El EventHandler delegado es un delegado predefinido que representa específicamente un método de controlador de eventos para un evento que no genera datos. Si el evento genera datos, debe usar la clase delegada genérica EventHandler<TEventArgs> .

Para asociar el evento con el método que controlará el evento, agregue una instancia del delegado al evento. Siempre que se produce el evento, se llama a su controlador, a menos que se quite el delegado.

Para obtener más información sobre los delegados del controlador de eventos, vea Control y generación de eventos.

Métodos de extensión

GetMethodInfo(Delegate)

Obtiene un objeto que representa el método representado por el delegado especificado.

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Consulte también