Newsgroup: it.comp.lang.visual-basic
Titolo: metodo Dispose non viene eseguito

VB.NET
Partial Class Analog1
    Inherits System.Windows.Forms.UserControl
    'UserControl overrides dispose to clean up the component list.
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        Try
            If disposing AndAlso components IsNot Nothing Then
                components.Dispose()
            End If
        Finally
            MyBase.Dispose(disposing)
        End Try
    End Sub
 Public Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
    End Sub
End Class
e fin qui ci siamo, sembra che non manchi nulla
nel mioform load
dim myclass as new Analog1
me.panel.controls.add(myclass)
apre il form e mi mostra perfettamente tutto e funzionante. Bene direte e 
allora cosa vuoi??
quando devo distruggere myclass in una funzione per caricare un'altra 
myclass ad esempio Analog2
utilizzo il metodo dispose() ma purtroppo il metodo non viene eseguito e si 
creano dei conflitti nella
nuova classe caricata dove non mi trova o non trova dichiarato i metodi di 
alcuni componenti, che guarda
caso utilizzano gli stessi nomi e le stesse propieta.
insomma in definitiva
myclass.dispose() non viene eseguito
ho finito con i form ed ora inizio con gli usercontrol
ovviamente grazie a tutti
 

 
VB.NET
zac
comunque tu la giri è sempre un problema di oggetti.
Un oggetto è vivo finchè c'è un riferimento che lo tiene in vita. Io
non posso chiedere il dispose di un oggetto in esecuzione...lo devo
prima chiudure.
Tu al limite vorresti un meccanismo di KILL: m'importa sega se sei in
esecuzione...chiuditi qualunque cosa tu stia facendo.
Inoltre è dispose
tutto quello che implementa un interfaccia IDisposable...se qualche
pezzo non lo è dispose ti da errore.
Inoltre passa del tempo prima che il dispose rimuova dalla memoria gli
oggetti.
poi...
se il tuo programma non trova metodi di un oggetto....che vordì?????
Se non trova metodi è perchè:
a) Non è istanziato l'oggetto (a meno di metodi statici)...ma si
controlla facile no?
b) Se l'oggetto c'è....lo scope del metodo è sbagliato
in buona sostanza
per me c'hai un po di arrosto logico...con OOP è facile farlo!
Hai in qualche punto....un po di codice che non implementa
correttamente i tuoi desideri: spesso è un riferimento circolare, un
metodo che chiami che sembra innocuo!
Controlla bene
p.s.
Francesco Balena "VB.net nozioni base tascabile"
pag 174
Un metodo dispose non dovrebbe sollevare alcune errore anche se
invocato più di una volta. anche quando tutte le chiamate successive
alla prima devono essere ignorate.
Per evitare di rilasciare più volte le risorse si può utilizzare una
variabile di classe:
Private disposed as Boolean
Sub Dispose() Implements IDisposable.Dispose
If disposed Then Exit Sub
disposed=true
'
'Codice che chiude file e altre risorse
'
End Sub
Questo negli oggetti che tu RICHIAMI

 ha scritto nel messaggio 
news:f5099c50-5af2-4043...@o13g2000yql.googlegroups.com...

il problema era derivato da un timer. In effetti il dispose avveniva, 
infatti quando caricavo la nuova classe UserControl nel contenitore, 
l'errore avveniva su quella che avevo scaricato e mi dava errore di 
riferimento ad oggetto. In effetti lo stava scaricando.
Con un'artificio ho prima interrotto il timer e dopo dispose sull'oggetto.
Ricaricando il nuovo oggetto, e facendo ripartire il timer non dava piu 
errore e l'altro oggetto veniva scaricato dalla memoria
comunque grazie