как да се абонирам за събитие в повдигнато в друга сборка

Имам решение, което съдържа 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