logo search
CSharp_Prog_Guide

Подписка на события программными средствами

  1. Определите метод обработчика событий, подпись которого соответствует подписи делегата для события. Например, если событие основано на типе делегата EventHandler, то следующий код представляет заглушку метода:

    void HandleCustomEvent(object sender, EventArgs a)

    {

    // Do something useful here.

    }

  2. Чтобы присоединить обработчик событий к событию, используйте оператор назначения сложения (+=). В следующем примере предположим, что объект с именем publisher имеет событие с именем RaiseCustomEvent. Обратите внимание, что для класса подписчика требуется ссылка на класс издателя, чтобы подписаться на его события.

    publisher.RaiseCustomEvent += HandleCustomEvent;

  3. Обратите внимание, что предыдущий синтаксис является нововведением в языке C# версии 2.0. Он в точности соответствует синтаксису C# 1.0, в котором при помощи ключевого слова new должен быть явно создан инкапсулирующий делегат.

    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

  4. Для добавления обработчика событий можно также использовать лямбда-выражение.

---

Дополнительные сведения см. в разделе Использование лямбда-выражений вне LINQ.

To subscribe to events by using an anonymous method

Unsubscribing

To prevent your event handler from being invoked when the event is raised, unsubscribe from the event. In order to prevent resource leaks, you should unsubscribe from events before you dispose of a subscriber object. Until you unsubscribe from an event, the multicast delegate that underlies the event in the publishing object has a reference to the delegate that encapsulates the subscriber's event handler. As long as the publishing object holds that reference, garbage collection will not delete your subscriber object.

To unsubscribe from an event