Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [vb.net] chiusura form con form.dispose()
Forum - C# / VB.NET - [vb.net] chiusura form con form.dispose()

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Alfonso (Normal User)
Rookie


Messaggi: 37
Iscritto: 16/05/2009

Segnala al moderatore
Postato alle 13:04
Lunedì, 01/06/2009
Ciao a tutti

Per liberare la memoria, in Vb6 quando si chiude una form è mia pratica aggiungere in Form_Unload, Set Form = Nothing e per il form di avvio (per es MainForm):

    For i = Forms.Count - 1 To 1 Step -1
        Unload Forms(i)
    Next
    Set MainForm = Nothing
    End

Nella conversione In Vb8 queste istruzioni sarebbero tradotte in
    
    Private Sub MainMenu_FormClosing(ByVal .... ecc)

    ' ----- per chiudere in sequenza le form aperte e poter procedere al salvataggio di eventuali modifiche a database

        While My.Application.OpenForms.Count > 1
            i = My.Application.OpenForms.Count - 1
            My.Application.OpenForms(i).Close()
        End While

    ' -------- per forzare il garbage
    Form.Dispose()

    Application.Exit()

    end sub

Ma sono necessarie?
Vb8 è così intelligente che gli basta Form.Close() per effettuare automaticamente Form.Dispose() ?
E (come mi sembra di capire) Application.Exit() procede alla chiusura sequenziale di tutte le form aperte prima di chiudere il programma?

Grazie in anticipo per i chiarimenti.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:16
Lunedì, 01/06/2009
Testo quotato

Postato originariamente da Alfonso:

Ciao a tutti

Per liberare la memoria, in Vb6 quando si chiude una form è mia pratica aggiungere in Form_Unload, Set Form = Nothing e per il form di avvio (per es MainForm):

    For i = Forms.Count - 1 To 1 Step -1
        Unload Forms(i)
    Next
    Set MainForm = Nothing
    End

Nella conversione In Vb8 queste istruzioni sarebbero tradotte in
    
    Private Sub MainMenu_FormClosing(ByVal .... ecc)

    ' ----- per chiudere in sequenza le form aperte e poter procedere al salvataggio di eventuali modifiche a database

        While My.Application.OpenForms.Count > 1
            i = My.Application.OpenForms.Count - 1
            My.Application.OpenForms(i).Close()
        End While

    ' -------- per forzare il garbage
    Form.Dispose()

    Application.Exit()

    end sub

Ma sono necessarie?
Vb8 è così intelligente che gli basta Form.Close() per effettuare automaticamente Form.Dispose() ?
E (come mi sembra di capire) Application.Exit() procede alla chiusura sequenziale di tutte le form aperte prima di chiudere il programma?

Grazie in anticipo per i chiarimenti.



Scusa, ma cosa c'entra vb6 o vb8 nella sezione vb.net?? Per quei linguaggi c'è una sezione apposita!

PM Quote
Avatar
Alfonso (Normal User)
Rookie


Messaggi: 37
Iscritto: 16/05/2009

Segnala al moderatore
Postato alle 13:55
Lunedì, 01/06/2009
Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET

Se no dove lo posto?

PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 14:25
Lunedì, 01/06/2009
non ne sono sicuro al 100% ma ci pensa il garbage collector a gestire la memoria e a chiamare le giuste dispose.
tu limitati a chiudere il form e basta.

application.exit() invece dovrebbe chiudere tutti i form però solo quando sono stati elaborati tutti i messaggi nella coda di attesa...


"There's no point in being exact about something if you don't even know what you're talking about."

JOHN VON NEUMANN


Siamo italiani NO??
Allora scriviamo in ITALIANO!!!!
PM Quote
Avatar
GoLDBeRG (Ex-Member)
Expert


Messaggi: 331
Iscritto: 19/12/2005

Segnala al moderatore
Postato alle 15:41
Lunedì, 01/06/2009
quando devi risparmiare memoria ram il vb.net ti mette di brutto i bastoni tra le ruote... l'ho scoperto a mie spese... ma l'ho fregato!!!

se hai un form basta fai il .close ci pensa lui a liberarle se invece come me hai una classe ad esempio
con 50 attribbuti o array quindi una classe molto pesante devi fare prima di dimentikarla il .Finalize che ordina al garbage collector di mettere in coda la liberazione ram di quella classe, non è detto che lo faccia subito, ma lo farà, cerca di usare il dispose e il finalize dove piu ti è possibile e quando non puoi azzera le variabili usando ad esempio dim casa as string= "" o dim pippo as object = nothing

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:45
Lunedì, 01/06/2009
Testo quotato

Postato originariamente da Alfonso:

Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET

Se no dove lo posto?



Excuse moi...pensavo si trattasse di vb

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:31
Lunedì, 01/06/2009
Testo quotato

Postato originariamente da Alfonso:

Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET




E' sicuramente VB.NET, ma la versione VB8 equivale a VB.NET 2005 ... mentre la VB9 e' la VB.NET 2008 ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 20:49
Lunedì, 01/06/2009
Testo quotato

Postato originariamente da theprogrammer:

  
Testo quotato

Postato originariamente da Alfonso:

Vb8 per me è Visual Basic Express 2008 che credo proprio faccia parte dell'ambiente .NET




E' sicuramente VB.NET, ma la versione VB8 equivale a VB.NET 2005 ... mentre la VB9 e' la VB.NET 2008 ...



Capito...

PM Quote
Avatar
Alfonso (Normal User)
Rookie


Messaggi: 37
Iscritto: 16/05/2009

Segnala al moderatore
Postato alle 0:19
Martedì, 02/06/2009
Allora io che uso Visual Basic 2008 Express devo riferirmi a questo ambiente con l'abbreviazione VB9?

Comunque per il mio quesito, credo di capire che più .close(), .dispose(), .finalize() metto meglio è.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo