Прочитать на английском

Поделиться через


EventHandler Делегат

Определение

Представляет метод, обрабатывающий событие, не имеющее данных.

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

Параметры

sender
Object

Источник события.

e
EventArgs

Объект, не содержащий данных события.

Атрибуты

Примеры

В следующем примере показано событие с именем ThresholdReached , связанное с делегатом EventHandler . Метод, назначенный делегату EventHandler , вызывается в методе 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; }
    }
}

Комментарии

Модель событий в платформа .NET Framework основана на наличии делегата события, который соединяет событие с его обработчиком. Чтобы вызвать событие, требуются два элемента:

  • Делегат, определяющий метод, предоставляющий ответ на событие.

  • При необходимости класс, содержащий данные события, если событие предоставляет данные.

Делегат — это тип, определяющий сигнатуру, то есть тип возвращаемого значения и типы списка параметров для метода. Тип делегата можно использовать для объявления переменной, которая может ссылаться на любой метод с той же сигнатурой, что и делегат.

Стандартная сигнатура делегата обработчика событий определяет метод, который не возвращает значение. Первый параметр этого метода имеет тип Object и ссылается на экземпляр, который вызывает событие . Второй параметр является производным от типа EventArgs и содержит данные события. Если событие не создает данные события, вторым параметром является просто значение EventArgs.Empty поля. В противном случае второй параметр является типом, производным от EventArgs , и предоставляет все поля или свойства, необходимые для хранения данных события.

Делегат EventHandler — это предопределенный делегат, который представляет метод обработчика событий для события, которое не создает данные. Если событие создает данные, необходимо использовать универсальный EventHandler<TEventArgs> класс делегата.

Чтобы связать событие с методом, который будет обрабатывать событие, добавьте экземпляр делегата в событие . Обработчик событий вызывается всякий раз, когда происходит событие, если делегат не удален.

Дополнительные сведения о делегатах обработчика событий см. в разделе Обработка и вызов событий.

Методы расширения

GetMethodInfo(Delegate)

Получает объект, представляющий метод, представленный указанным делегатом.

Применяется к

Продукт Версии
.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

См. также раздел