Autor Beitrag
Yankyy02
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Sa 28.09.13 19:15 
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 user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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)

Für diesen Beitrag haben gedankt: Yankyy02
Yankyy02 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 138
Erhaltene Danke: 21

Win 11 x64
C# (VS 2022 - Rider)
BeitragVerfasst: Sa 28.09.13 21:45 
Hallo und danke für deinen Beitrag!

Soll heißen das wenn ich mit
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
MyWindow window = new MyWindow();
window.ShowDialog();

if(window.myProperty)
{
    // ich hier noch ganz normal mit den
    // öffentlichen Propertys der MyWindow 
    // Klasse arbeiten kann? Wann wird dann
    // MyWindow "zerstört" ??
}
}

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.

Für diesen Beitrag haben gedankt: Yankyy02