关闭无模式VB6应用程序时,该应用程序如何进行清理?

时间:2020-03-06 14:37:32  来源:igfitidea点击:

一个VB6应用程序正在使用Interop Forms Toolkit来处理用.NET编写的表单。该工具箱的文档建议在VB6应用程序关闭时调用该工具箱上的方法以建议该工具箱。

VB6应用程序使用Sub Main程序加载初始屏幕,然后显示几种无模式形式。当Sub Main完成时,该应用程序仍在运行。应用程序如何检测到它正在关闭并调用Toolkit上的cleanup方法?

解决方案

自从我在VB6中编写以来已经有一段时间了,但是如果我没有记错的话,可以使用Unload事件调用清理代码(类似于.net中的close事件)。我们还可以检查VB6应用程序中是否没有其他表格仍在运行

在一个模块(可能与包含Sub Main的模块相同)中,创建一个公共子目录(例如AppCleanUp),其中将包含清理代码。

将一个类添加到项目中(例如clsAppCleanup)。在此类中,在Class_Terminate事件处理程序中添加代码,以调用我们在上一步中创建的子级。

在一个模块(可能包含Sub Main的模块)中,定义一个clsAppCleanup变量。

在Sub Main中,实例化clsAppCleanup。

当应用程序关闭时,该类上的终止事件将导致运行清除代码。

创建一个包含FormCount变量的模块。此变量将由应用程序中的所有表单共享。在每个窗体的Form_Initialize方法中增加FormCount变量。在每个窗体的Form_Terminate方法中减少FormCount。当FormCount降回0时,我们可以通知表单工具箱该表单已被卸载。

我们不必担心多线程问题,因为VB6创建了单线程应用程序,因此一种表单的Initialize(或者Terminate)方法将在其他表单开始执行之前运行完成。