Laden...

Muss ich bei Windows Forms alle Controls auf der Form explizit disposen mittels Dispose()?

Erstellt von fungi35 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.188 Views
F
fungi35 Themenstarter:in
42 Beiträge seit 2015
vor 6 Jahren
Muss ich bei Windows Forms alle Controls auf der Form explizit disposen mittels Dispose()?

Hallo Leute,

ich habe folgende Frage: Muss ich bei Windows Forms alle Controls auf der Form explizit disposen mittels Dispose()?

Ich habe folgende Dispose-Implementierung in der Form:


        public void Close()
        {
            ((IDisposable)this).Dispose();
        }

        void IDisposable.Dispose()
        {
           this.Dispose(true);
           GC.SuppressFinalize(this);
        }

        ~ViewDruckSelektion()
        {
            this.Dispose(false);
        }

        public void Dispose (bool pDisposing)
        {
            if (pDisposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }

            // Hier die unverwalteten Ressourcen freigeben
            base.Dispose(pDisposing);
        }

Regelt components.Dispose(); den Dispose()-Aufruf für alle in der Form enthaltenen Komponenten?

Gruß fungi

6.911 Beiträge seit 2009
vor 6 Jahren

Hallo fungi35,

Regelt components.Dispose(); den Dispose()-Aufruf für alle in der Form enthaltenen Komponenten?

Da, da wird mit einer Schleife über alle Komponenten (und deren Kinder) iteriert und Dispose durchgeführt.

Für WinForms reicht sonst auch der Code aus der Visual-Studio-Vorlage für das Umsetzen des Dispose-Patterns.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

D
985 Beiträge seit 2014
vor 6 Jahren

Die Form-Klasse implementiert schon IDisposable weil von Component abgeleitet.

Hier nochmals explizit IDisposable implementieren ist eher der klassische Fall von Torte im Auge. Wenn du explizit was zum disposen hast, dann mittels override der Dispose(boolean) Methode.