Auf Englisch lesen

Freigeben über


EventHandler Delegat

Definition

Stellt die Methode dar, die ein Ereignis ohne Ereignisdaten behandelt.

public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler(object? sender, EventArgs e);
[System.Serializable]
public delegate void EventHandler(object sender, EventArgs e);
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);

Parameter

sender
Object

Die Quelle des Ereignisses.

e
EventArgs

Ein Objekt, das keine Ereignisdaten enthält.

Attribute

Beispiele

Das folgende Beispiel zeigt ein Ereignis namens ThresholdReached , das einem EventHandler Delegaten zugeordnet ist. Die dem EventHandler Delegaten zugewiesene Methode wird in der OnThresholdReached -Methode aufgerufen.

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

Hinweise

Das Ereignismodell im .NET Framework basiert auf einem Ereignisdelegat, der ein Ereignis mit seinem Handler verbindet. Zum Auslösen eines Ereignisses sind zwei Elemente erforderlich:

  • Ein Delegat, der die Methode identifiziert, 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 eine beliebige Methode mit derselben Signatur wie der Delegat verweisen kann.

Die Standardsignatur eines Ereignishandlerdelegats 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 Delegat ist ein vordefinierter Delegat, der speziell eine Ereignishandlermethode für ein Ereignis darstellt, das keine Daten generiert. Wenn Ihr Ereignis Daten generiert, müssen Sie die generische EventHandler<TEventArgs> Delegatklasse verwenden.

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 Ereignishandlerdelegierten 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 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

Weitere Informationen