c#事件处理程序订阅问题

时间:2015-01-15 10:10:36

标签: c#

我有一个A类,它定义了一个像公共事件EventHandler OnCommandReply这样的事件; 我还有两个订阅该事件的类。但是,当事件被触发时,只有一个接收事件的类。我想知道如何让两个人都接收被解雇的事件。

由于

3 个答案:

答案 0 :(得分:1)

我试图重现你的错误,但我不能......这就是我试过的:

public void Main()
{
  var a = new A();

  var b = new B();
  var c = new C();

  a.SomethingChanged += b.OnSomethingChanged;
  a.SomethingChanged += c.OnSomethingChanged;

  a.RaiseSomethingChangedEvent();
}

private class A
{
  public event EventHandler SomethingChanged;

  public void RaiseSomethingChangedEvent()
  {
    if(SomethingChanged !=null)
      SomethingChanged(this, new EventArgs());
  }
}

private class B
{
  public void OnSomethingChanged(object sender, EventArgs e)
  {
    Console.WriteLine("B: Event was raised.");
  }
}

private class C
{
  public void OnSomethingChanged(object sender, EventArgs e)
  {
    Console.WriteLine("C: Event was raised.");
  }
}

答案 1 :(得分:0)

如果您正确订阅了该事件,则应始终触发两者。您确定不能使用-=取消订阅该活动吗?或者将其设置为null?

您是否使用+=正确订阅了活动?

订阅

publisher.RaiseCustomEvent += HandleCustomEvent;

取消注册:

 publisher.RaiseCustomEvent -= HandleCustomEvent;

以下是一篇很好的文章:How to: Subscribe to and Unsubscribe from Events (C# Programming Guide)

答案 2 :(得分:0)

在向发布者注册活动订阅者时,请确保不使用=运算符。这样做将用当前订户替换任何/所有当前注册的事件订户。相反,请务必使用+ =运算符将当前订阅者附加到事件处理程序的调用列表中。