繁体   English   中英

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

[英]How to raise an event when a new handler is assigned?

我正在尝试复制现有.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.
}

如果我使用GamerJoined事件编写自己的NetworkSession类,该如何实现?

是的,您可以使用add contextual关键字执行此操作。

当您有一行时:

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM