Ler em inglês

Compartilhar via


EventHandler<TEventArgs> Delegar

Definição

Representa o método que manipulará um evento quando o evento fornecer dados.

C#
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
C#
public delegate void EventHandler<TEventArgs>(object? sender, TEventArgs e);
C#
[System.Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;
C#
[System.Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);

Parâmetros de tipo

TEventArgs

O tipo dos dados de eventos gerados pelo evento.

Parâmetros

sender
Object

A fonte do evento.

e
TEventArgs

Um objeto que contém os dados do evento.

Atributos

Exemplos

O exemplo a seguir mostra um evento chamado ThresholdReached. O evento está associado a um EventHandler<TEventArgs> delegado.

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

Comentários

O modelo de evento no .NET Framework baseia-se em ter um delegado de evento que conecta um evento com seu manipulador. Para gerar um evento, dois elementos são necessários:

  • Um delegado que se refere a um método que fornece a resposta ao evento.

  • Opcionalmente, uma classe que contém os dados do evento, se o evento fornecer dados.

O delegado é um tipo que define uma assinatura, ou seja, o tipo de valor retornado e os tipos de lista de parâmetros para um método. Você pode usar o tipo delegado para declarar uma variável que pode se referir a qualquer método com a mesma assinatura que o delegado.

A assinatura padrão de um delegado do manipulador de eventos define um método que não retorna um valor. O primeiro parâmetro desse método é do tipo Object e se refere à instância que aciona o evento. Seu segundo parâmetro é derivado do tipo EventArgs e contém os dados do evento. Se o evento não gerar dados de evento, o segundo parâmetro será simplesmente o valor do EventArgs.Empty campo. Caso contrário, o segundo parâmetro é um tipo derivado de EventArgs e fornece todos os campos ou propriedades necessários para armazenar os dados do evento.

O EventHandler<TEventArgs> delegado é um delegado predefinido que representa um método de manipulador de eventos para um evento que gera dados. A vantagem de usar EventHandler<TEventArgs> é que você não precisa codificar seu próprio delegado personalizado se o evento gerar dados de evento. Você simplesmente fornece o tipo do objeto de dados de evento como o parâmetro genérico.

Para associar o evento ao método que manipulará o evento, adicione uma instância do delegado ao evento . O manipulador de eventos é chamado sempre que o evento ocorre, a menos que você remova o representante.

Para obter mais informações sobre representantes do manipulador de eventos, consulte Manipulando e gerando eventos.

Métodos de Extensão

GetMethodInfo(Delegate)

Obtém um objeto que representa o método representado pelo delegado especificado.

Aplica-se a

Produto Versões
.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 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

Confira também