本过程说明如何使用 Connector 对象来引用单个共享的 CoffeeMonitor 对象。
注意 本主题是逐步创建 ActiveX EXE 示例过程中的一部分。选择“创建 ActiveX EXE 部件”,开始本主题。
要在CoffeeWatch 中接收 CoffeeReady 事件,请按照以下步骤执行:
Option Explicit
Private WithEvents mwcmnTest As CoffeeMonitor
Private mcctTest As Connector
新变量 mcctTest
将保持对 Connector 对象的引用。字母‘cct’用来说明变量是 Connector 类型的。
Private Sub Form_Load()
Set mcctTest = New Connector
Set mwcmnTest = mcctTest.CoffeeMonitor
End Sub
将再次每隔十秒收到来自 Coffee 的通知。
?TypeName(gCoffeeWatch)
结果为 Nothing,表示共享的 CoffeeMonitor 对象已被释放。
将发现:再次运行 Coffee 工程,接着制作 CoffeeWatch.exe 并运行其多个实例。(必须先运行 Coffee 工程,使其类型库信息可被利用)。可在 Coffee 中设置断点,可以观察它为多个客户提供对象时的对象的事件和属性的工作情况。
连接器类中有一个缺陷。如果所有的客户都释放了它们的 Connector 对象(而保持对共享 CoffeeMonitor 的引用),最后一个连接器会释放该全局引用。那时,任何创建连接器的客户,就会再生成第二个 CoffeeMonitor,因为新的连接器将发现全局变量 gCoffeeWatch
为 Nothing。如果 CoffeeMonitor 真的使用串行口,则会产生冲突。
示例应用程序 Coffee2.Vbp 和 CoffWat2.Vbp 寻求到了一种解决该缺陷的可能途径。
另一种通知客户的技术是异步回调方法,在“使用回调方法的异步通知”中将讨论这种方法。回调实现起来比较困难,但它允许部件接收由客户端产生的返回值和错误,性能也稍好些。
示例应用程序 Coffee2.Vbp 和 CoffWat2.Vbp 中有使用回调的 CoffeeReady 的实现。
没有用户接口的代码部件可以被称作无人监控的执行,这是说它们不与用户交互。对于进程外部件,该选项也能够多线程,这在“建立代码部件”的“可扩展性与多线程”中讨论。
示例应用程序 MTCoffee.vbp 演示了简单的多线程方案。
详细信息 启动和处理事件的基础知识在《Visual Basic 程序员指南》的“用对象编程”中的“给类添加事件”中介绍。部件中的事件在“部件设计的一般准则”的“给类添加事件”中讨论。
本主题是逐步创建 ActiveX EXE 示例过程中的一部分。
要到 | 请参阅 |
下一步 | 创建并测试可执行的 Coffee |
从头开始 | 创建 ActiveX EXE 部件 |