Entwickler-Ecke
C# - Die Sprache - Weitergabe von Werten an aufrufendes Fenster
Yankyy02 - Sa 28.09.13 19:15
Titel: Weitergabe von Werten an aufrufendes Fenster
Hallo,
ich hab da ein Verständniss Problem bzs. bin ich mir nicht sicher ob das so stimmt wie ich es mir denke drum wäre es schön wenn mir wär das kurz erklären könnte.
Ich erstelle ein neues Fenster mit
MyWindow window = new MyWindow();
und rufe die
ShowDialog() Methode auf
window.ShowDialog();
In dem Fenster gibt es eine Eigenschaft
public string myProperty{ get{return _myProperty;} } die ich nach dem schließen des Fensters weiter verwenden möchte.
Und nun zu meinem Problem denn ich bin der Meinung das wenn ich auf das Fenster
this.Close() aufrufe ja implizit
Dispose() der Fensterklasse aufgerufen wird und alles freigegeben wird.
Ich würde aber gerne nach dem schließen des Fensters die Eigenschaft mit
window.myProperty weiterverwenden. Was ja auch funktioniert aber wie lange kann ich sie weiterverwenden? Räumt nicht der GarbageCollector irgendwann alles auf oder erkennt er das die Eigenschaft noch weiter verwendet wird?
Ich hoffe ich hab mein Problem verständlich erklärt und ich würde mich freuen wenn jemand Licht ins Dunkle bringen
könnte.
MfG
Yankyy02
Moderiert von
Th69: C#-Tags hinzugefügt
Ralf Jansen - Sa 28.09.13 20:43
Dispose würde nicht gemanagte Resourcen freigeben, heißt die Instanz deiner Klasse existiert nach einem Dispose natürlich auch weiterhin. Da an einem WPF Window nur .Net Resourcen hängen hat die gar kein Dispose. Dein Gedankengang mit Dispose zieht hier also gar nicht.
Beim GC ist es so das der nicht mehr referenzierte Instanzen zerstört. Wenn du sagst du willst später auf eine Property der Klasse zugreifen impliziert das zwangsweise das du eine Referenz darauf hast also kann die gar nicht vom GC zerstört sein. Solange du die Chance hast an eine Refernez auf die Instanz zu kommen kannst du immer davon ausgehen das der GC da noch nix gemacht hat (dreckige Tricks ausgenommen)
Yankyy02 - Sa 28.09.13 21:45
Hallo und danke für deinen Beitrag!
Soll heißen das wenn ich mit
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| MyWindow window = new MyWindow(); window.ShowDialog();
if(window.myProperty) { } |
}
Moderiert von
Th69: C#-Tags hinzugefügt
Ralf Jansen - Sa 28.09.13 23:03
Die Variable window wird zerstört sobald du den aktuellen Scope verläßt in dem window definiert ist. Das MYWindow Object auf das von window verwiesen wurde wird sobald auch keine andere Variable darauf verweist kurzfristig vom GC als Müll markiert und dann irgendwann wenn Zeit ist oder Speicher benötigt wird tatsächlich freigegeben. Der genaue Algorithmus ist OS (Server oder Desktop) und Frameworkversions abhängig. Ein Großteil der Details wirst du in der MSDN finden wenn dich die interessieren.
Da dieses Object für dich nicht erreichbar ist sollte es aber auch völlig egal sein wann das genau passiert. Der Sinn des GC ist ja unter anderem dich davon zu befreien über das wann, wo und wie nachdenken zu müssen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!