【问题标题】:How can a modeless VB6 application do cleanup when the application is shutting down?当应用程序关闭时,无模式的 VB6 应用程序如何进行清理?
【发布时间】:2008-09-23 20:36:55
【问题描述】:

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

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

【问题讨论】:

  • *正在关闭 -- 请校对。

标签: winforms vb6 interop com-interop


【解决方案1】:

在一个模块中(可能与包含 Sub Main 的模块相同),创建一个公共 sub(例如 AppCleanUp)来保存您的清理代码。

为您的项目添加一个类(例如 clsAppCleanup)。在这个类中,在调用您在上一步中创建的子类的 Class_Terminate 事件处理程序中添加代码。

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

在 Sub Main 中,实例化 clsAppCleanup。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • Unload 事件发生在表单中。该应用程序显示了几种形式。我正在寻找一个中心位置来检测应用程序正在关闭,因为应用程序中有 400 多个表单。
    • Private Sub Form_Unload(Cancel As Integer) If Forms.Count = 1 then msgbox "I am the last form"`结束子`
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多