EventHandler<TEventArgs> Delegato

Definizione

Rappresenta il metodo che gestirà un evento quando l'evento fornisce dati.

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

Parametri di tipo

TEventArgs

Tipo di dati dell'evento generati dall'evento.

Parametri

sender
Object

Origine dell'evento.

e
TEventArgs

Oggetto che contiene i dati dell'evento.

Attributi

Esempio

Nell'esempio seguente viene illustrato un evento denominato ThresholdReached. L'evento è associato a un EventHandler<TEventArgs> delegato.

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Counter c = new Counter(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 int threshold;
        private int total;

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

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

        protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
        {
            EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;
            if (handler != null)
            {
                handler(this, e);
            }
        }

        public event EventHandler<ThresholdReachedEventArgs> ThresholdReached;
    }

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

Commenti

Il modello di evento in .NET Framework si basa sulla presenza di un delegato di evento che connette un evento al relativo gestore. Per generare un evento, sono necessari due elementi:

  • Delegato che fa riferimento a un metodo che fornisce la risposta all'evento.

  • Facoltativamente, una classe che trattiene i dati dell'evento, se l'evento fornisce i dati.

Il delegato è un tipo che definisce una firma, ovvero il tipo di valore restituito e i tipi di elenco di parametri per un metodo. È possibile usare il tipo delegato per dichiarare una variabile che può fare riferimento a qualsiasi metodo con la stessa firma del delegato.

La firma standard di un delegato del gestore eventi definisce un metodo che non restituisce un valore. Il primo parametro del metodo è di tipo Object e fa riferimento all'istanza che genera l'evento. Il secondo parametro viene derivato dal tipo EventArgs e trattiene i dati dell'evento. Se l'evento non genera dati relativi all'evento, il secondo parametro è semplicemente il valore del campo EventArgs.Empty. In caso contrario, il secondo parametro è un tipo derivato da EventArgs e fornisce i campi e le proprietà necessarie per trattenere i dati dell'evento.

Il EventHandler<TEventArgs> delegato è un delegato predefinito che rappresenta un metodo del gestore eventi per un evento che genera dati. Il vantaggio dell'uso EventHandler<TEventArgs> è che non è necessario codificare un delegato personalizzato se l'evento genera dati dell'evento. È sufficiente specificare il tipo dell'oggetto dati dell'evento come parametro generico.

Per associare l'evento al metodo che gestirà l'evento, aggiungere un'istanza del delegato all'evento. Il gestore eventi viene chiamato ogni volta che si verifica l'evento, a meno che non venga rimosso il delegato.

Per altre informazioni sui delegati del gestore eventi, vedere Gestione e generazione di eventi.

Metodi di estensione

GetMethodInfo(Delegate)

Ottiene un oggetto che rappresenta il metodo rappresentato dal delegato specificato.

Si applica a

Vedi anche