0

我正在设计一个客户端测试脚本生成应用程序。应用程序找到提供程序中的每个自动化元素,并在提供程序中的每个自动化元素上注册一个侦听器。每当用户与提供者的 UI 交互时,自动化元素都会触发记录在我的应用程序中的事件。现在,主窗体上的按钮触发事件,但子窗体中的按钮不触发事件。我意识到子表单按钮在提供者的代码中没有订阅者。所以我的问题是,.NET 按钮是否仅在至少有一个订阅者时才会触发事件?

4

1 回答 1

3

这有点像问“如果一棵树倒在森林里而没有人听到它,它会发出声音吗?” 如果你去那里一探究竟,就会有人听到它。

当处理程序附加到 .NET 事件时,将创建一个集合对象并向其中添加一个委托。当一个事件发生时,框架会检查这个集合是否存在。当存在时,它的元素会被枚举和调用,否则事件调度会提前终止。

“[D]o .NET 按钮只有在至少有一个订阅者的情况下才会触发事件?”

如果“触发事件”是指“调用委托来调用事件处理程序”,那么显然只有在有委托时才会发生这种情况。显然,如果没有,那么它们就不能被调用。在“框架是否在没有委托时寻找要调用的委托”的意义上,那么事件确实在没有处理程序的情况下触发。

于 2012-06-22T00:21:56.160 回答