2010-09-08 5 views

Antwort

12

Wenn Sie Dispose auf dem Formular aufrufen, ruft es Dispose für jedes Steuerelement in seiner Auflistung. Diese Kontrollen werden wiederum dasselbe tun, und am Ende sollte die Methode 'Dispose' aller Steuerelemente aufgerufen werden. Beachten Sie, dass dies nicht darauf basiert, ob die Steuerelemente im Designer vorhanden sind oder nicht. Es basiert auf den Steuerinstanzen, die in der Controls Sammlung des Formulars zu dem Zeitpunkt gefunden werden, zu dem der Aufruf an Dispose erfolgt. Der einzige Fall, wenn ich sehen könnte, dass dies nicht passieren würde, ist, wenn Sie selbst ein Containersteuerelement erstellen und Dispose überschreiben, ohne den Aufruf entweder an die Basisklasse weiterzuleiten oder über die enthaltenen Steuerelemente zu iterieren und Dispose auf ihnen aufzurufen.

+0

Yup. Die Komponenten sind unterschiedlich, dafür sorgt die automatisch generierte Dispose() -Methode. Das Entfernen eines Steuerelements aus der Controls-Auflistung und das Nichtverwenden ist ein guter Weg, um zu lecken. –

4

Es sollte. Möglicherweise müssen Sie in der YourForm.designer.cs-Datei suchen. Es wird wie folgt aussehen:

protected override void Dispose(bool disposing) 
{ 
    if(disposing && (components != null)) 
    { 
     components.Dispose(); 
    } 
    base.Dispose(disposing) 
} 

Der base.Dispose(); Anruf wird auf die Form der Kontrollen zur Reinigung hinzugefügt kümmern.

+0

Das ist nicht ganz richtig; Das 'components'-Feld ist' null', es sei denn, Sie haben nicht-UI-Komponenten (wie ein 'Timer',' HelpProvider' oder 'BackgroundWorker') auf dem Formular. "Komponenten" behandelt die Entsorgung dieser Komponenten. Es ruft keine anderen Steuerelemente wie Schaltflächen, Textfelder usw. auf. –

+0

Genau, die Steuerelemente des Formulars werden tatsächlich über den Aufruf von 'base.Dispose()' angeordnet, nämlich in 'Control.Dispose()'. Es gibt viel mehr Reinigung, wie Sie sehen werden, wenn Sie mit Reflector in 'Form.Dispose()' schauen. –

+0

Updates, danke für die Kommentare – SwDevMan81

Verwandte Themen