0

我遇到了一个事件上升的问题。这是我的基类:

public abstract class MyClass<T>
{
  public event EventHandler<MessageReceivedEventArgs<T>> MessageReceived;

  protected void OnMessageReceived(MyClass<T> sender, MessageReceivedEventArgs<T> e)
  {
    EventHandler<MessageReceivedEventArgs<T>> handler = MessageReceived;

    if (MessageReceived != null)
      MessageReceived(sender, e);
  }
}

我的实现:

public class MyDerivedClass: MyClass<string>
{
  void AFunction()
  {
    // Do some stuff
    OnMessageReceived(this, new MessageReceivedEventArgs<string>("data"));
  }

OnMessageReceived被调用时,系统抛出一个System.ArgumentNullException(“值不能为空。参数名称:类型”)。我已经阅读了这个帖子,还有这个帖子,这有助于我构建这段代码。但我找不到这些异常的原因(sender并且e不为空,用调试器检查)。

我究竟做错了什么 ?

编辑:这是我的MessageReceivedEventArgs实现:

public class MessageReceivedEventArgs<T> : EventArgs
{
  public T Data { get; private set; }

  public MessageReceivedEventArgs(T data)
  {
    Data = data;
  }
}
4

1 回答 1

3

您确定异常是由您的代码引发的吗?任何事件订阅者都可能抛出异常。

事件处理是一个顺序操作。因此,如果第一个订阅者抛出未处理的异常,则事件处理将失败。

编辑:你有没有看过堆栈跟踪。您也可以尝试通过“异常”窗口让 ide 在每个 ArgumentNullException 上停止。

于 2012-10-26T10:47:54.753 回答