gpt4 book ai didi

c# - 删除匿名事件处理程序

转载 作者:IT王子 更新时间:2023-10-29 04:17:37 26 4
gpt4 key购买 nike

我有以下代码,其中 SprintServiceClient 是对 WCF 服务的引用-

public class OnlineService
{
private SprintServiceClient _client;
public OnlineService()
{
_client = new SprintServiceClient();
}

public void AddMemberToTeam(MemberModel user, int projectId, Action<int> callback)
{
_client.AddMemberToTeamCompleted += (s, e) => callback(e.Result);
_client.AddMemberToTeamAsync(user.ToUser(), projectId);
}
}

问题是每次调用 AddMemberToTeam 时都会向 client.AddMemberToTeamCompleted 添加另一个回调

即第一次调用 AddMemberToTeam 时回调被调用一次,第二次调用 AddMemberToTeam 回调被调用两次等等。

一旦事件处理程序被调用或使用其他接受回调的方法,是否有任何方法可以从 AddMemberToTeamCompleted 中删除事件处理程序?

最佳答案

只要先将委托(delegate)分配给变量,就可以从内部引用匿名方法:

EventHandler<SomeEventArgs> handler = null;
handler = (s, e) =>
{
_client.AddMemberToTeamCompleted -= handler;
callback(e.Result);
};

_client.AddMemberToTeamCompleted += handler;

注意变量需要单独声明并赋值,否则在方法体内使用时编译器会认为它未初始化。

关于c# - 删除匿名事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com