Leggere in inglese

Condividi tramite


EventHandler Delegato

Definizione

Rappresenta il metodo che gestirà un evento senza dati sugli eventi.

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

Parametri

sender
Object

Origine dell'evento.

e
EventArgs

Oggetto che non contiene dati dell'evento.

Attributi

Esempio

Nell'esempio seguente viene illustrato un evento denominato ThresholdReached associato a un delegato EventHandler. Il metodo assegnato al delegato EventHandler viene chiamato nel metodo OnThresholdReached.

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

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 identifica il 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 delegato EventHandler è un delegato predefinito che rappresenta in modo specifico un metodo del gestore eventi per un evento che non genera dati. Se l'evento genera dati, è necessario utilizzare la classe delegata generica EventHandler<TEventArgs>.

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

Prodotto Versioni
.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

Vedi anche