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...

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 ...

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