我有以下代码,其中 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/