2010-09-30 11 views
6

Ho un modulo con un membro che implementa IDisposable ma non IComponent. Ho bisogno di disporlo quando il modulo dispone. Sfortunatamente la disposizione del modulo è già implementata nella porzione generata automaticamente del codice e non è parziale.Smaltire un non componente quando un modulo viene smaltito?

Come posso smaltire questo oggetto?

+1

Un po 'di una call iffy per metterlo nel file di Designer ma volevano lasciare pulito quello principale. Lo spostamento non è un problema, il designer è interessato solo alla regione marcata. Puoi cambiare il modello dell'articolo per renderlo permanente, se lo desideri. –

risposta

3

Ignora Form.Dispose(bool) nel modulo e disponi del tuo oggetto lì.

Per capire come funziona, è possibile fare riferimento alla pagina di MSDN su Implementing a Dispose Method. La classe Form segue questo modello, che consente di sovrascrivere Dispose(bool) in sottoclassi. (Basta fare in modo di chiamare base.Dispose(disposing) correttamente nel override, pure.)


Se non sei spostamento comodo, questo dalle .designer.cs il file nel file .cs principale, l'altra opzione è quella di iscriviti al tuo evento FormClosed e smaltisci le risorse in quel gestore eventi. MSDN consiglia questo approccio - dai documenti per FormClosed:

È possibile utilizzare questo evento per eseguire attività quali la liberazione delle risorse utilizzate dal modulo e per salvare le informazioni immesse nel modulo o per aggiornare il modulo padre.

+1

Form Designer ha già sostituito Form.Dispose() per lui. Sfortunatamente è un metodo generato (e, come tale, non si dovrebbe aggiungere codice personalizzato ad esso). –

+1

@Justin: devi spostarlo, se stai usando il designer, nel tuo codice - funziona e non viene ricreato. –

+0

@Justin: ho appena aggiunto anche un'altra opzione (potenzialmente migliore);) –

1

È possibile spostare il metodo inverso a Dispose(bool) sul lato della classe parziale. Dall'esperienza, non viene ricreato nella parte designer.

Problemi correlati