使用事件实现异步处理可分为两部分工作。第一部分是部件的设计人员的责任。设计人员需要:
第二部分是使用这个部件的开发者的工作。开发者应该:
图 8.12 显示了设计人员部分和开发者部分是如何相互作用,为 CoffeeReady 示例提供异步处理。这个 CoffeeReady 示例来自“创建 ActiveX EXE 部件”的循序渐进过程。
图 8.12 使用事件的异步通知
注意 图 8.12 中的号码代表在已结束的应用程序和部件中发生的事情的顺序。它们和任务列表中的号码并不是对应的。
单个事件可以被多个客户端处理。将多个客户端连到单个 Coffee 对象的一种方法是在客户端与 Coffee 对象之间插入一个 Connection 对象。在这种方法中,每个客户端都有自己的 Connection 对象,每个 Connection 对象为各自的客户端提供对同一个 Coffee 对象的引用。
如果客户端的 WithEvents 变量存放了 Coffee 对象引用,它就可以接收 Coffee 对象的 CoffeeReady 事件。
注意 Visual Basic 的事件可被认为是匿名的。也就是说,产生该事件的对象无法知道指定的事件是由一个、两个还是两打对象来处理,也可能根本就没有对象处理。此外,产生事件的对象也不知道在处理该事件的代码中是否发生了错误。
重点 如果系统中有多个客户端接收同一个事件,决不能预先假定客户端接收事件的顺序。这个顺序是无法定义的,而且可能与版本号或平台有关。
详细信息 关于这些任务的执行方法,请参阅“创建 ActiveX EXE 部件”中的循序渐进过程,其中演示了使用事件和回调的异步通知。