我如何订阅另一个程序集中引发的事件

时间:2010-01-18 22:05:48

标签: c# events assemblies solution

我有一个包含3个项目的解决方案。一个项目处理异步通信。当它完成它的回调时,它会引发一个事件SomethingCompleted。 如何在同一解决方案中从另一个项目订阅此事件?

我在接收项目中构建了事件处理程序,但它没有在发送项目中看到该事件。

3 个答案:

答案 0 :(得分:7)

除非使用internal访问修饰符声明事件本身,否则在单独的程序集中引发的事件没有什么特别之处。检查它是否公开。

举一个例子来说明我的意思,我相信你对订阅Button.Click没有三思而后行 - 但是Button是一个不同的集会,不是吗?

答案 1 :(得分:2)

必须在定义它的类中将事件声明为public:

public class Something
{
  public event EventHandler SomethingCompleted;
}

然后您可以订阅它,就像任何其他事件一样:

Something s = ...;
s.SomethingCompleted += SomeEventHandler;

答案 2 :(得分:0)

您需要引用引发事件的类来注册事件处理程序。

完成后,就像注册任何其他事件处理程序一样:

foo.SomethingCompleted += (sender, e) => this.DoSomething();