如何在分配新处理程序时引发事件?

时间:2014-02-09 02:56:49

标签: c# events .net-4.0

我正在尝试复制现有.NET XNA类事件提供的功能:NetworkSession.GamerJoined

当事件被分配给它时,可立即引发,例如:

myNetworkSession.GamerJoined += GamerJoinedEventHandler;

void GamerJoinedEventHandler(object sender, GamerJoinedEventArgs e)
{
    // If you put a beakpoint on the assignment line above and another here
    // this handler is called during the assignment.
}

如果我使用NetworkSession事件编写自己的GamerJoined课程,我该如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

是的,您可以使用add上下文关键字来执行此操作。

当你有这条线时:

public event EventHandler<GamerJoinedEventArgs> GamerJoined;

这是语法糖:

public event EventHandler<GamerJoinedEventArgs> GamerJoined
{
    add
    {
        this.gamerJoined += (EventHandler<GamerJoinedEventArgs>)Delegate.Combine(this.gamerJoined, value);
    }
    remove
    {
        this.gamerJoined -= (EventHandler<GamerJoinedEventArgs>)Delegate.Remove(this.gamerJoined, value);
    }
}

其中gamerJoined是事件的私有支持字段。因此,您可以编写自己的add来调用处理程序,例如

public event EventHandler<GamerJoinedEventArgs> GamerJoined
{
    add
    {
        this.gamerJoined += (EventHandler<GamerJoinedEventArgs>)Delegate.Combine(this.gamerJoined, value);
        value(this, new GamerJoinedEventArgs(myGamer));
    }
    remove
    {
        this.gamerJoined -= (EventHandler<GamerJoinedEventArgs>)Delegate.Remove(this.gamerJoined, value);
    }
}