Auf Englisch lesen

Freigeben über


EventHandler<TEventArgs> Delegat

Definition

Stellt die Methode dar, von der ein Ereignis behandelt wird, wenn das Ereignis die Daten bereitstellt.

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

Typparameter

TEventArgs

Der Typ der vom Ereignis generierten Ereignisdaten.

Parameter

sender
Object

Die Quelle des Ereignisses.

e
TEventArgs

Ein Objekt, das die Ereignisdaten enthält.

Attribute

Beispiele

Das folgende Beispiel zeigt ein Ereignis mit dem Namen ThresholdReached. Das Ereignis ist einem EventHandler<TEventArgs> Delegaten zugeordnet.

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

Hinweise

Das Ereignismodell im .NET Framework basiert auf einem Ereignisdelegaten, der ein Ereignis mit seinem Handler verbindet. Um ein Ereignis auszulösen, sind zwei Elemente erforderlich:

  • Ein Delegat, der auf eine Methode verweist, die die Antwort auf das Ereignis bereitstellt.

  • Optional eine Klasse, die die Ereignisdaten enthält, wenn das Ereignis Daten bereitstellt.

Der Delegat ist ein Typ, der eine Signatur definiert, d. h. den Rückgabewerttyp und die Parameterlistentypen für eine Methode. Sie können den Delegattyp verwenden, um eine Variable zu deklarieren, die auf jede Methode mit derselben Signatur wie der Delegat verweisen kann.

Die Standardsignatur eines Ereignishandlerdelegaten definiert eine Methode, die keinen Wert zurückgibt. Der erste Parameter dieser Methode ist vom Typ Object und verweist auf den instance, der das Ereignis auslöst. Der zweite Parameter wird vom Typ EventArgs abgeleitet und enthält die Ereignisdaten. Wenn das Ereignis keine Ereignisdaten generiert, ist der zweite Parameter einfach der Wert des EventArgs.Empty Felds. Andernfalls ist der zweite Parameter ein von EventArgs abgeleiteter Typ und stellt alle Felder oder Eigenschaften bereit, die zum Aufnehmen der Ereignisdaten erforderlich sind.

Der EventHandler<TEventArgs> Delegat ist ein vordefinierter Delegat, der eine Ereignishandlermethode für ein Ereignis darstellt, das Daten generiert. Der Vorteil der Verwendung EventHandler<TEventArgs> besteht darin, dass Sie keinen eigenen benutzerdefinierten Delegaten codieren müssen, wenn Ihr Ereignis Ereignisdaten generiert. Sie geben einfach den Typ des Ereignisdatenobjekts als generischen Parameter an.

Um das Ereignis der Methode zuzuordnen, die das Ereignis behandelt, fügen Sie dem Ereignis eine instance des Delegaten hinzu. Der Ereignishandler wird bei jedem Eintreten des Ereignisses aufgerufen, sofern der Delegat nicht entfernt wird.

Weitere Informationen zu Ereignishandlerdelegaten finden Sie unter Behandeln und Auslösen von Ereignissen.

Erweiterungsmethoden

GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird.

Gilt für:

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

Weitere Informationen