Как немодальное приложение VB6 может выполнять очистку, когда приложение закрывается?

Приложение VB6 использует набор инструментов Interop Forms для работы с формами, написанными на .NET. В документации к набору инструментов рекомендуется вызывать метод в наборе инструментов, чтобы сообщать набору инструментов, когда приложение VB6 закрывается.

Приложение VB6 использует процедуру Sub Main, которая загружает экран-заставку, а затем отображает несколько немодальных форм. Когда Sub Main завершается, приложение все еще работает. Как приложение может определить, что оно закрывается, и вызвать метод очистки в наборе инструментов?


person hurcane    schedule 23.09.2008    source источник
comment
*закрытие -- Пожалуйста, проверьте.   -  person GEOCHET    schedule 24.09.2008


Ответы (3)


В модуле (вероятно, в том же самом, который содержит Sub Main) создайте публичный sub (например, AppCleanUp), который будет содержать ваш код очистки.

Добавьте класс в свой проект (например, clsAppCleanup). В этом классе добавьте код в обработчик событий Class_Terminate, который вызывает подпрограмму, созданную на предыдущем шаге.

В модуле (возможно, в том же, что и Sub Main) определите переменную clsAppCleanup.

В Sub Main создайте экземпляр clsAppCleanup.

Когда приложение закрывается, событие завершения в классе приведет к запуску кода очистки.

person hurcane    schedule 23.09.2008

Прошло некоторое время с тех пор, как я писал на VB6, но, если я правильно помню, вы можете использовать событие Unload для вызова кода очистки (оно похоже на событие закрытия в .net). Вы также можете проверить, что в приложении VB6 нет других запущенных форм.

person Leo Moore    schedule 23.09.2008
comment
Событие Unload происходит в форме. Приложение показывает несколько форм. Я ищу центральное место, чтобы обнаружить, что приложение закрывается, потому что в приложении более 400 форм. - person hurcane; 24.09.2008
comment
Private Sub Form_Unload(Cancel As Integer) If Forms.Count = 1 then msgbox "I am the last form" `Конец подпрограммы` - person Noodles; 19.02.2019

Создайте модуль, содержащий переменную FormCount. Эта переменная будет использоваться всеми формами в вашем приложении. Увеличьте переменную FormCount в методе Form_Initialize каждой формы. Уменьшите FormCount в методе Form_Terminate каждой формы. Когда FormCount возвращается к 0, вы можете уведомить свой инструментарий форм о том, что формы были выгружены.

Вам не придется беспокоиться о проблемах многопоточности, потому что VB6 создает однопоточные приложения, поэтому метод Initialize (или Terminate) одной формы будет выполняться до завершения до того, как начнут выполняться другие.

person JeffK    schedule 26.11.2008