Oppure

Loading
16/06/11 9:50
fusebyte
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.

Grazie

Ciao
aaa
16/06/11 12:35
gibra
Che dici: secondo te noi possiamo indovinare il tuo codice?

:asd:
aaa
16/06/11 16:16
fusebyte
:-))) quasi quasi hai ragione:-)

Posto il Form_Unload

Private Sub Form_Unload(Cancel As Integer)

SaveSetting APP.Title, "Index", Indx, Text26.Text 
SaveSetting APP.Title, "Counter", "Cntrl", Text43.Text 

'memorizzo posizione form
If Me.WindowState <> vbMinimized Then
    SaveSetting APP.Title, "Setting", "MainLeft", Me.left
    SaveSetting APP.Title, "Setting", "MainTop", Me.top
    SaveSetting APP.Title, "Setting", "MainWidth", Me.Width
    SaveSetting APP.Title, "Setting", "MainHeight", Me.Height
End If

Call MyDll.Disconnect
Cancel = 0
Unload AddButton
Unload Form3
Unload FormTotal
Unload Form_Log
Unload Form2
Unload Form5
Unload frmLogin
Unload frmCount
Unload MyForm
Unload MyForm2
Unload Me

 'Unload this form. Important: always End With "unload me".
    TrayI.cbSize = Len(TrayI)
    TrayI.hWnd = pichook.hWnd
    TrayI.uID = 1&
    'Delete the icon
    Shell_NotifyIcon NIM_DELETE, TrayI
    End

End Sub


Ecco,questo è il mio "misero" codice :-) ...a me sembra sia tutto ok,,ma ..sembra è diverso da certo:-)

Ciao
aaa
17/06/11 7:09
gibra
Il tuo codice non è misero, anzi il contrario! :asd:
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:

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. :nono:
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).

HTH
:)

aaa
17/06/11 9:37
fusebyte
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.

Ti ringrazio.
aaa
18/06/11 7:32
gibra
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 :asd:


aaa
18/06/11 9:07
fusebyte
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
aaa
18/06/11 15:42
gibra
Postato originariamente da fusebyte:

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. :asd:
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.
[b]Mai sentito parlare di gestore degli errori?[7b]
Immagino di sì.:D


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.

aaa