如果您不需要将任何自定义参数传递给事件处理函数,则可以使用使用基本EventArgs的默认EventHandler委托。
声明你要提供这样的事件:
public event EventHandler EventReceived;
public event EventHandler ObjectReceived;
声明每个事件来处理引发事件对你的保护方法。这实际上只是一种方便,无需每次都需要重复此操作。你可以这样做内联。
如果没有附加的事件处理程序,则您的事件将为空。该方法在触发事件之前处理检查。
protected void RaiseEventReceived(EventArgs e)
{
if (EventReceived != null)
EventReceived(this, e);
}
然后当您想要提升事件时调用该方法。该方法将处理检查以查看是否有人正在收听该事件。
public void SomeOtherMethod()
{
while (IsConnected)
{
switch (CurrentState)
{
case CurrentServerState.EventReceived:
RaiseEventReceived(EventArgs.Empty);
break;
case CurrentServerState.ObjectReceived:
RaiseObjectReceived(EventArgs.Empty);
break;
}
}
}
您可以声明自己的类,以通过派生自EventArgs(如下所示)将自定义参数传递给事件处理程序。按照惯例,你的类应该被命名为* something * EventArgs。
public class EventReceivedEventArgs : EventArgs
{
// Declare properties to hold additional event info here
}
那么你就需要声明一个自定义的委托,它需要新的事件参数的参数:
public delegate void EventReceivedEventHandler(object sender, EventReceivedEventArgs e);
更新您的事件声明,而不是使用新的委托EventHandler类型:
public event EventReceivedEventHandler EventReceived;
最后,在引发事件时,您当然会想要创建自定义事件参数类的新实例并初始化您的自定义属性。
客户端可以使用正常语法将多个处理程序附加到您的事件,并且它们将始终在正确的线程上调用。