当我上课听这样的其他事件时
Private WithEvents myClass As eventEmitter
Private Sub myClass_myEvent()
'[...Handle Event]
End Sub
,然后在myClass
Public Event myEvent
Sub DoStuff()
RaiseEvent myEvent
End Sub
要使VBA将RaiseEvent
语句转换为对myClass_myEvent
事件处理程序的调用,VBA会采取什么步骤?需要做些什么?
我从内到外都知道如何在VBA中处理和引发事件,但是我仍然不确定它们到底是什么以及它们如何工作。
我已经阅读了关于IDispatch
的点点滴滴,我尝试研究了VB.Net
的处理方式,因此我可以看到VBA中使用的整个ObjectType_EventName()
处理程序语法正在隐藏很多。
我猜想在幕后,事件的工作方式可能与message queues类似(除了对象而不是窗口),因为事件似乎以相同的方式建立。但是,也许它们更像常规的调用栈-事件知道其侦听什么,并将函数调用放在与那些侦听器对象关联的调用栈上。只有类可以引发和处理VBA中的事件这一事实向我表明,与解释事件相关的某些内存/接口必须存在于所有VBA对象上,因此可能与VBA的COM实现有关
但这差不多可以解决我的问题,而且我对这些主题还不够熟悉,无法为自己更多地使用Google,因此问题仍然存在:Events如何在后台运行?