gpt4 book ai didi

C# 事件订阅和取消订阅重复项

转载 作者:太空狗 更新时间:2023-10-29 19:57:13 25 4
gpt4 key购买 nike

用eventHandler订阅同一个事件3次有问题吗?例如

a.SomethingChanged += new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);
a.SomethingChanged += new EventHandler(ChangeHandler);

这是否会导致 ChangeHandler 被调用 3 次而不是 1 次?处理这个问题的最佳方法是什么?

请注意,这些冗余并不在一起,而是代码路径的不同区域。

同样,取消订阅未注册的事件是否存在问题?例如

a.SomethingChanged -= new EventHandler(ChangeHandler);  //ChangeHandler was never registered

最佳答案

如果您多次订阅一个事件,那么您的处理程序将被调用相应的次数 - 在您的示例中为三次。

这是否是一个问题取决于你的事件处理程序做了什么,但我假设你不希望它被多次调用。

取消订阅您未订阅的事件没有问题。

因此,如果您不确定您的应用程序处于什么状态(尽管您确实应该如此),您可以:

a.SomethingChanged -= ChangeHandler;
...
a.SomethingChanged += ChangeHandler;

(注意:new EventHandler(...) 是语法糖,可以省略)

关于C# 事件订阅和取消订阅重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14466964/

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