Wenn ich ein Formular erstelle, enthält der automatisch generierte Code keine überlagerte Dispose-Methode. Bedeutet das, dass Dispose nicht für alle Steuerelemente im Formular aufgerufen wird?Ruft Form.dispose() Steuerelemente in Dispose() auf?
Antwort
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.
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.
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. –
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. –
Updates, danke für die Kommentare – SwDevMan81
- 1. Ruft Garbage Collector Dispose() auf?
- 2. C# Form.Close vs Form.Dispose
- 3. Wie stelle ich alle Steuerelemente in einem Panel oder Formular bei ONCE? C#
- 4. Wieso ruft das Aufrufen von dispose() auf Graphics-Objekt dazu auf, dass JPanel keine Komponenten rendert?
- 5. Muss ich alle exposed dispose-Funktionen der Steuerelemente innerhalb eines Windows-Formulars in der überschriebenen Dispose-Funktion aufrufen?
- 6. Ruft ASP.Net Dispose auf der Seite/den Steuerelementen auf einer Seite auf, oder muss ich das tun?
- 7. Zweck von Dispose aufrufen Dispose (IsDisposing) Muster in C#?
- 8. Ruft der Aufruf von Clear auch die Artikel auf?
- 9. Dispose für String^in CLI?
- 10. Ausnahme lösen in Dispose-Methode
- 11. Objekt dispose in IDisposable Klasse
- 12. Benutzerdefinierte Tooltip auf Steuerelemente
- 13. * Dies ruft Konstruktor auf?
- 14. IsUserInRole ruft GetRolesForUser auf?
- 15. Silverlight ruft WCF auf
- 16. Interessantes Ereignis "Dispose" Verhalten
- 17. InvokeCommandAction ruft nicht auf
- 18. Memberfunktionszeiger ruft Kopierkonstruktor auf?
- 19. private void Dispose (bool)?
- 20. Dispose() zum Bereinigen verwalteter Ressourcen?
- 21. Warum sind meine C# -Steuerelemente mit IsDisposed auf "True" gesetzt, ohne dass die Dispose-Methode ausgelöst wird?
- 22. Differenz zwischen dispose und Ausgang auf Schließen in Java
- 23. ASP MVC: Wann wird IController Dispose() aufgerufen?
- 24. Zugriff auf RepeaterItem-Steuerelemente in einem EventHandler
- 25. Programmatische Zugriff auf Ribbon-Steuerelemente in VSTO
- 26. Überprüfung auf gebundene Steuerelemente in WPF
- 27. Wie dispose offene UserControl in Ereignis?
- 28. Chromecast-API ruft nicht auf sessionListener() ruft zurück
- 29. Ruft new [] den Standardkonstruktor in C++ auf?
- 30. Wie "ruft" eine Klasseninstanz in PHP auf?
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. –