In meinen Applikationen gibt es ab und an Manager, welche sich Referenzen auf Instanzen die sie selbst erzeugt hatten, merken sollen.
Diese Manager sollen aber die erzeugten Instanzen nicht unnötig am Leben halten. Deswegen verwende ich hierzu die
System.WeakReference Klasse.
Das sieht dann so aus:
List<WeakReference> formRefs =....
...
Form myForm = new Form();
WeakReference myRef = new WeakRefrence(myForm);
formRefs.add(myRef);
beim abrufen kann man nun prüfen ob die Instanz noch am leben ist und zwar so in der art
if(myRef.IsAlive && myRef.Target != null)
{
Form myOldForm = myRef.Target as Form;
if(myOldForm != null)
{
....
}
}
Allerdings hat mich das ständige casten schnell genervt und so habe ich eine generische Implementierung drauf gesetzt.
Mir dieser Klasse kann man sich eine WeakReference nun so erzeugen
WeakReference<Form> weakRef = new WeakReference<Form>(myForm);
und spart sich nun das ganze casten.
if(weakRef.IsAlive && weakRef.Target != null)
{
Form myOldForm = weakRef.Target;
//Sicherheitsprüfung, um auszuschließen dass der GC soeben asynchron das obejkt weggeworfen hat
if(myOldForm != null)
{
}
}
Die Klasse gibts im Anhang
WeakReference.cs (2,2 KB)Feedback welcome !