Как подписаться на события другого класса в C#?

Простой сценарий: пользовательский класс, который генерирует событие. Я хочу использовать это событие в форме и реагировать на него.

Как я делаю это?

Обратите внимание, что форма и пользовательский класс являются отдельными классами.

18
задан AustinWBryan 15 September 2019 в 17:46
поделиться

3 ответа

public class EventThrower
{
    public delegate void EventHandler(object sender, EventArgs args) ;
    public event EventHandler ThrowEvent = delegate{};

    public void SomethingHappened() => ThrowEvent(this, new EventArgs());
}

public class EventSubscriber
{
    private EventThrower _Thrower;

    public EventSubscriber()
    {
        _Thrower = new EventThrower();
        // using lambda expression..could use method like other answers on here

        _Thrower.ThrowEvent += (sender, args) => { DoSomething(); };
    }

    private void DoSomething()
    {
       // Handle event.....
    }
}
27
ответ дан 30 November 2019 в 07:44
поделиться

Предполагая, что ваше событие обрабатывается EventHandler ,

0
ответ дан 30 November 2019 в 07:44
поделиться

Внутри вашей формы:

private void SubscribeToEvent(OtherClass theInstance) => theInstance.SomeEvent += this.MyEventHandler;

private void MyEventHandler(object sender, EventArgs args)
{
    // Do something on the event
}

Вы просто подписываетесь на событие на другой класс так же, как и для события в вашей форме. Следует помнить о трех важных вещах:

  1. Вам необходимо убедиться, что ваш метод (обработчик событий) имеет соответствующее объявление, соответствующее типу делегата события в другом классе.

  2. Событие в другом классе необходимо чтобы быть видимым вам (например, общедоступным или внутренним).

  3. Подпишитесь на действительный экземпляр класса, а не на сам класс.

6
ответ дан 30 November 2019 в 07:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: