当前位置:  开发笔记 > 编程语言 > 正文

VB.NET:即使没有事件处理程序,事件也会引发?

如何解决《VB.NET:即使没有事件处理程序,事件也会引发?》经验,为你挑选了2个好方法。

我有一个下载,检查和保存一些大型XML文件的类.有时我希望UI告诉我发生了什么,但有时我会使用该类并忽略事件.所以我在十几个地方放置了这样的代码行:

RaiseEvent Report("Sending request: " & queryString)

RaiseEvent Report("Saving file: " & fileName)

RaiseEvent Report("Finished")

我的问题是 - 如果没有人在听他们的话,这些事件会减慢我的代码吗?他们甚至会开枪吗?



1> Shane Miskin..:

我自己的答案:

在VB.NET中,如果没有设置处理程序来监听事件,则不会触发事件.

我做了一个小实验,其中引发事件的代码传递函数的结果,并且该函数仅在设置事件处理程序来处理事件时执行.

RaiseEvent Report(GetMyString())

换句话说,我说GetMystring除非处理程序实际存在,否则不会调用上面的函数.



2> Binary Worri..:

没有魔法,隐藏在RaiseEvent下的代码完全符合您的期望,它遍历一组处理程序,并执行每一个.检查看到的开销是否有任何处理程序是微不足道的,不要担心它.

如果您的真实问题是"为了节省时间,我应该在提交事件之前检查事件是否有处理程序?" ...然后答案是"不",这样做你就什么也得不到.

此外,除非您需要,否则不要担心优化(请参阅此维基百科条目以了解原因.)

回复:打电话GetMystring().

是的,这与您在C#中如何引发事件有关,在这里您可以在引发事件之前检查处理程序是否存在.例如:

if (MyEvent != null)
    MyEvent(GetMyString())

方式很好的实验:)

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有