как подписаться на событие, поднятое в другой сборке

У меня есть решение, которое содержит 3 проекта. Один проект обрабатывает асинхронные коммуникации. Когда он завершил свой обратный вызов, он вызывает событие SomethingCompleted. Как подписаться на это событие из другого проекта в том же решении?

У меня есть обработчики событий, встроенные в проект-получатель, но он не видит событие в проекте-отправителе.


person Congero    schedule 18.01.2010    source источник


Ответы (3)


Вам нужно иметь ссылку на класс, вызывающий событие, чтобы зарегистрировать обработчик события.

Как только вы это сделаете, это делается так же, как регистрация любого другого обработчика событий:

foo.SomethingCompleted += (sender, e) => this.DoSomething();
person Mark Seemann    schedule 18.01.2010
comment
Спасибо за помощь, это то, что мне было нужно - person Congero; 19.01.2010

В событиях, создаваемых в отдельной сборке, нет ничего особенного, если только само событие не объявлено с модификатором доступа internal. Убедитесь, что он общедоступен.

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

person Jon Skeet    schedule 18.01.2010

Событие должно быть объявлено как общедоступное в классе, который его определяет:

public class Something
{
  public event EventHandler SomethingCompleted;
}

Затем вы можете подписаться на него, как и на любое другое событие:

Something s = ...;
s.SomethingCompleted += SomeEventHandler;
person itowlson    schedule 18.01.2010