我遇到了一个事件上升的问题。这是我的基类:
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
(“值不能为空。参数名称:类型”)。我已经阅读了this thread和this one,这有助于我构建此代码。但我找不到这些异常的原因(sender
和e
不为空,用调试器检查)。
我做错了什么?
编辑:这是我的MessageReceivedEventArgs
实施:
public class MessageReceivedEventArgs<T> : EventArgs
{
public T Data { get; private set; }
public MessageReceivedEventArgs(T data)
{
Data = data;
}
}
答案 0 :(得分:3)
您确定您的代码抛出了异常吗?任何事件订阅者都可能抛出异常。
事件处理是一种顺序操作。因此,如果第一个订阅者抛出未处理的异常,则事件处理将失败。
编辑:您是否看过堆栈跟踪?你也可以尝试通过“Exception”窗口让ide停止在每个ArgumentNullException上。