| 

.NET C# Java Javascript Exception

2
Hallo zusammen,

ich stehe gerade auf'm Schlauch: Ich erzeuge innerhalb eines von UserControl abgeleiteten Controls ein BindingSource-Objekt. Da dies über eine Dispose-Methode verfügt, möchte ich diese Methode aufrufen, wenn das Control zerstört wird, um den belegten Speicher ordentlich wieder freizugeben.

Früher war das relativ easy (Designer-Code nicht in sep. Datei), da der Designer bereits die Dispose-Methode der Basisklasse überschrieben hat und ggf. freizugebende Ressourcen dort einfach mit eingefügt werden konnten:

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
// Hier konnten dann weitere Ressourcen freigegeben werden.
}
base.Dispose(disposing);
}

Mein Problem ist jetzt, dass der Designer-Code ja nun in einer anderen Datei steht und dort die Dispose-Methode bereits überschrieben wurde. Somit kann ich das innerhalb meines Controls nicht mehr tun.

Nachdem ich jetzt gerade fünf mal alle Ereignisse und virtuellen Methoden von UserControl durchgesehen habe, finde ich noch immer keine passende Stelle, wo ich denn nun meine Ressourcen freigeben kann.

Hat jemand einen Tip bzw. wo ist mein Gedankenfehler?
News:
09.03.2011
Torsten Weber 691 1 8
2 Antworten
1
Ich glaube, da machst Du wirklich einen Denkfehler: die generierte Dispose-Methode erledigt das schon von selbst. Da steht drin
components.Dispose();
, und die BindingSource bekommt im Konstruktor die components mit übergeben - ich geh mal davon aus, dass sie sich dann dort ordentlich registriert und folglich später auch mit aufgeräumt wird.

Wenn Du die BindingSource selbst (per Code) erzeugst, so "do as the designer does" und gib ihr den components-Container im Konstruktor mit.

Wenn Du Nicht-Components selber disposen willst, dann könnte Dich dieser Thread bei stackoverflow interessieren. Dort werden zwei Meinungen vertreten:

  • die generierte Dispose-Methode erweitern - der VS-Designer überschreibt das nicht
  • einen Event-Handler für das Disposed-Event verwenden - aus meiner Sicht die sauberere Lösung
09.03.2011
Matthias Hlawatsch 13,2k 4 9
Okay, für den Fall der BindingSource-Instanz wäre das möglich und klingt logisch. Ich habe oben nur BindingSource als Beispiel erwähnt, hantiere aber z.B. auch mit einigen Bitmap-Objekten und denen kann ich den components-Container nicht übergeben.
Torsten Weber 09.03.2011
Verstehe. Habe meine Antwort entsprechend erweitert.
Matthias Hlawatsch 09.03.2011
1
Hier findest du einen Artikel, den dieses Thema behandelt:
How To Dispose Members From Forms
09.03.2011
Fredo 575 1 9

Stelle deine .net-Frage jetzt!