Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
La mia applicazione, nonostante mi sia preoccupato di chiudere tutte le chiamate
con unload, a volte mi rimane nel TASK e mi sottrae memoria.
Perche' succede questo?
E' possibile evitare che questo succeda ottimizzando il codice di chiusura applicazione?
Naturalmente vi chiedo cortesemente come potrei fare.
Il tuo codice non è misero, anzi il contrario!
Troppi UnLoad in sequenza (di cui non si conosce l'esito) messi in serie.
Dovresti gestire l'UnLoad man mano che chiudi OGNI singolo form, in cui devi prevedere eventuale codice di controllo (ma non sapendo cosa fa la tua applicazione non si può dire di più).
Gestendo la chiusura di ogni form a tempo debito, ovvero quando non serve più, semplifica la gestione della stessa.
Tra l'altro mettere l'istruzione:
Codice sorgente - presumibilmente Plain Text
Unload Me
all'interno dell'evento Form_Unload() è completamente assurdo, oltre che sbagliato, perchè l'istruzione Unload Me scatena proprio l'evento Form_Unload, quindi corri il rischio di entrare in un loop infinito, e forse a causa di questo fatto hai probabilmente pensato di usare l'End, ma...
... usare End è assolutamente sbagliato.
NON si deve MAI usare End, se lo si usa si deve conoscere esattamente quali sono le ripercussioni di tale uso, quindi va usato SOLO a ragion veduta.
Questo non è certo il caso.
Ti consiglio di consultare la guida in cui sono spiegati dettagliatamente i problemi che derivano dall'uso errato di End (come nel tuo caso).
Rivedro' tutti i form e la gestione della loro chiusura.
Per l' END mi è stato consigliato per gestire meglio la chiusura della TRAY
ma evidentemente non è cosi'
E' una TRAY composta da N icone e nella barra risulta come un lampeggio.
Giusto per ribadire,
l'uso di End è sbagliato (a prescindere) perchè 'tronca' l'esecuzione del programma, ed i risultati possono essere disastrosi.
Nessuna risorsa viene rilasciata, e spesse volte genera un'errore in uscita dell'applicazione, ma solo nel compilato (EXE) perchè nell'IDE VB6 intercetta l'End e provvede a eseguire i passi necessari.
La prima volta che usai End, tantissimi anni fa, mi accadeva proprio questo.
Stavo utilizzando un OCX (credo fosse il primo del suo genere) per gestire le immagini nei menu.
Contattai l'autore (oltre oceano) che, senza nemmeno conoscere il mio codice mi rispose (in inglese):
"Togli l'End."
Rimasi di stucco! Come faceva a sapere che usavo End...
Ovviamente tutto funzionava perfettamente.
Allora sono andato a documentarmi sulla guida (quello che ti ho consigliato di fare).
Chi ha consigliato l'uso di End, probablimente aveva da poco fatto bisboccia
Se esiste pero' a qualcosa dovra pur servire.
Per esempio, se la mia applicazione sta facendo dei calcoli e va in loop per un qualche errore di qualsiasi natura,per uscirne ,usare END puo' rivelarsi utile?
Parliamo di casi estremi dove l'unica soluzione è chiudere l' applicazione da task.
Se esiste pero' a qualcosa dovra pur servire.
Per esempio, se la mia applicazione sta facendo dei calcoli e va in loop per un qualche errore di qualsiasi natura,per uscirne ,usare END puo' rivelarsi utile?
Parliamo di casi estremi dove l'unica soluzione è chiudere l' applicazione da task.
Ciao
Guarda che sei completamente fuori pista.
ma se prima non ti leggi la guida, mi pare inutile continuare a discutere ipotizzando situazioni strane.
Rifletti: se un'applicazione va in loop come fai bloccarla con End?
Se lo vuoi fare, significa che l'hai previsto, e se è così devi gestire l'errore.
Mai sentito parlare di gestore degli errori?[7b]
Immagino di sì.
Se l'applicazione va in loop perchè non hai previsto un gestore degli errori, allora End NON è la soluzione, ma sarà il cliente a chiudere il processo, avvisarti del problema e tu dovrai correggere l'errore.
Quindi alla fine, la soluzione è gestire gli errori.
Per una buona applicazione non devi usare end, perchè se usi end significa che il programma non si riesce a chiudere perchè ancora sta facendo qualcosa.
Rincontrolla bene il codice, potrebbero esserci cicli mal scritti, oppure quando chiudi il programma aspetta un pò magari ci mette solo qualche minuto in più perchè sta finendo di fare qualcosa.
Usare unload va bene, ma devi anche controllare che ogni funzione, ogni operazione sia svolta correttamente e che termini dopo aver svolto il suo compito.