使用EventHandler是什么意思?

时间:2016-09-14 06:04:31

标签: c# event-handling

在下面的代码中尚未添加的取消注册事件处理程序有什么用?

public class foo 
{
    private event EventHandler<boo> booCompleted;

    public RegisterBooCompletedHandler(EventHandler<boo> newBooCompletedEventHandler, bool forceUnregisterOtherEventHandlers)
    {
        if (forceUnregisterOtherEventHandlers) 
            booCompleted = null

         booCompleted -= newBooCompletedEventHandler;       // <- why do we unregister not added yet event handler?
         booCompleted += newBooCompletedEventHandler;
    }
}

1 个答案:

答案 0 :(得分:4)

这意味着如果您使用相同的处理程序多次调用RegisterBooCompletedHandler(handler),您仍然只能为该处理程序订阅事件一次

我的猜测是实际你已经看到了这个,因为有人解决了问题,他们真的在错误的地方订阅了这个事件,所以多次订阅......但是我我确定有一些的案例,很难知道你是否已经订阅,只是让它(再几乎)无法再次订阅是很方便的。

我说这是“(几乎)无操作”因为它改变了顺序。考虑:

// After this call, invocation list is A
RegisterBooCompletedHandler(A, false);
// After this call, invocation list is A, B
RegisterBooCompletedHandler(B, false);
// After this call, invocation list is A, B, C
RegisterBooCompletedHandler(C, false);
// After this call, invocation list is A, C, B
RegisterBooCompletedHandler(B, false);