一个 VB6 应用程序正在使用 Interop Forms Toolkit 来处理用 .NET 编写的表单。工具包的文档建议在 VB6 应用程序关闭时调用工具包上的方法来通知工具包。
VB6 应用程序使用加载初始屏幕的 Sub Main 过程,然后显示几个无模式窗体。当 Sub Main 完成时,应用程序仍在运行。应用程序如何检测到它正在关闭并调用 Toolkit 上的清理方法?
一个 VB6 应用程序正在使用 Interop Forms Toolkit 来处理用 .NET 编写的表单。工具包的文档建议在 VB6 应用程序关闭时调用工具包上的方法来通知工具包。
VB6 应用程序使用加载初始屏幕的 Sub Main 过程,然后显示几个无模式窗体。当 Sub Main 完成时,应用程序仍在运行。应用程序如何检测到它正在关闭并调用 Toolkit 上的清理方法?
在一个模块(可能与包含 Sub Main 的模块相同)中,创建一个公共 sub(例如 AppCleanUp)来保存您的清理代码。
为您的项目添加一个类(例如 clsAppCleanup)。在这个类中,在调用您在上一步中创建的 sub 的 Class_Terminate 事件处理程序中添加代码。
在一个模块中(可能与包含 Sub Main 的模块相同),定义一个 clsAppCleanup 变量。
在 Sub Main 中,实例化 clsAppCleanup。
当应用程序关闭时,类上的终止事件将导致清理代码运行。
自从我用 VB6 编写以来已经有一段时间了,但如果我没记错的话,您可以使用 Unload 事件来调用您的清理代码(它类似于 .net 中的关闭事件)。您还可以检查 VB6 应用程序中是否没有其他窗体仍在运行
创建一个包含 FormCount 变量的模块。此变量将由应用程序中的所有表单共享。在每个表单的 Form_Initialize 方法中增加 FormCount 变量。在每个表单的 Form_Terminate 方法中减少 FormCount。当 FormCount 回落到 0 时,您可以通知您的表单工具包表单已被卸载。
您不必担心多线程问题,因为 VB6 创建了单线程应用程序,因此一个表单的 Initialize(或 Terminate)方法将在任何其他表单开始执行之前运行完成。