In che modo un'applicazione VB6 non modale può eseguire la pulizia quando l'applicazione viene chiusa?

StackOverflow https://stackoverflow.com/questions/123688

Domanda

Un'applicazione VB6 sta usando Interop Forms Toolkit per lavorare con moduli scritti in .NET. La documentazione per il toolkit consiglia di chiamare un metodo sul toolkit per avvisare il toolkit quando l'applicazione VB6 viene chiusa.

L'applicazione VB6 utilizza una procedura Sub Main che carica una schermata iniziale, quindi visualizza diversi moduli non modali. Al termine di Sub Main, l'applicazione è ancora in esecuzione. Come può l'applicazione rilevare che si sta chiudendo e chiamare il metodo di pulizia su Toolkit?

È stato utile?

Soluzione

In un modulo (probabilmente lo stesso che contiene Sub Main), crea un sub pubblico (ad esempio AppCleanUp) che conterrà il tuo codice di pulizia.

Aggiungi una classe al tuo progetto (ad esempio clsAppCleanup). In questa classe, aggiungi il codice nel gestore eventi Class_Terminate che chiama il sub creato nel passaggio precedente.

In un modulo (probabilmente lo stesso che contiene Sub Main), definire una variabile di clsAppCleanup.

In Sub Main, creare un'istanza di clsAppCleanup.

Quando l'app viene chiusa, l'evento di fine sulla classe farà eseguire il codice di pulizia.

Altri suggerimenti

È passato un po 'di tempo da quando ho scritto in VB6 ma se ricordo bene puoi usare l'evento Unload per chiamare il tuo codice di cleanup (simile all'evento di chiusura in .net). Puoi anche verificare che non vi siano altri moduli nell'app VB6 ancora in esecuzione

Crea un modulo che contiene una variabile FormCount. Questa variabile sarà condivisa da tutti i moduli dell'applicazione. Incrementa la variabile FormCount nel metodo Form_Initialize di ogni modulo. Decrementa FormCount nel metodo Form_Terminate di ogni modulo. Quando FormCount torna a 0, è possibile comunicare al toolkit del modulo che i moduli sono stati scaricati.

Non dovrai preoccuparti di problemi multi-thread perché VB6 crea applicazioni a thread singolo, quindi il metodo Initialize (o Terminate) di un modulo verrà eseguito fino al completamento prima che altri inizino l'esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top