Číst v angličtině

Sdílet prostřednictvím


EventHandler<TEventArgs> Delegát

Definice

Představuje metodu, která bude zpracovávat událost, když událost poskytuje data.

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

Parametry typu

TEventArgs

Typ dat události vygenerovaných událostí.

Parametry

sender
Object

Zdroj události

e
TEventArgs

Objekt, který obsahuje data události.

Atributy

Příklady

Následující příklad ukazuje událost s názvem ThresholdReached. Událost je přidružená k delegátu EventHandler<TEventArgs> .

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

Poznámky

Model událostí v rozhraní .NET Framework je založen na delegátovi události, který propojuje událost s její obslužnou rutinou. K vyvolání události jsou potřeba dva prvky:

  • Delegát, který odkazuje na metodu, která poskytuje odpověď na událost.

  • Volitelně třída, která obsahuje data události, pokud událost poskytuje data.

Delegát je typ, který definuje podpis, tj. typ návratové hodnoty a typy seznamu parametrů pro metodu. Typ delegáta můžete použít k deklaraci proměnné, která může odkazovat na libovolnou metodu se stejným podpisem jako delegát.

Standardní podpis delegáta obslužné rutiny události definuje metodu, která nevrací hodnotu. První parametr této metody je typu Object a odkazuje na instanci, která vyvolá událost. Jeho druhý parametr je odvozený z typu EventArgs a obsahuje data události. Pokud událost negeneruje data události, je druhým parametrem jednoduše hodnota EventArgs.Empty pole. V opačném případě je druhý parametr typem odvozeným z EventArgs a poskytuje všechna pole nebo vlastnosti potřebné k uložení dat události.

Delegát EventHandler<TEventArgs> je předdefinovaný delegát, který představuje metodu obslužné rutiny události pro událost, která generuje data. Výhodou použití EventHandler<TEventArgs> je, že pokud událost generuje data událostí, nemusíte kódovat vlastního delegáta. Jako obecný parametr jednoduše zadáte typ objektu dat události.

Pokud chcete událost přidružit k metodě, která bude událost zpracovávat, přidejte do události instanci delegáta. Obslužná rutina události je volána při každém výskytu události, dokud neodeberete delegáta.

Další informace o delegátech obslužných rutin událostí najdete v tématu Zpracování a vyvolávání událostí.

Metody rozšíření

GetMethodInfo(Delegate)

Získá objekt, který představuje metodu reprezentovanou zadaným delegátem.

Platí pro

Produkt Verze
.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

Viz také