Brillante ejemplo real con WeakReference se explica en Android development tutorial.
Hay una imagen (mapa de bits) y un contenedor de imágenes en la vista (ImageView). Si la imagen no se cargará desde la memoria (pero, por ejemplo, desde el disco, la red), entonces puede bloquear el hilo de la interfaz de usuario y la pantalla. Para evitarlo, se puede usar una tarea asíncrona.
El problema surge cuando finaliza la tarea asincrónica. El contenedor de imágenes no puede ser útil en absoluto en ese momento (la pantalla se cambia o Android descarga la parte invisible de la vista después de desplazarse). WeakReference puede ayudar aquí y ImageView será basura recolectada.
class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
public BitmapWorkerTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
}
// Method for getting bitmap is removed for code clearness
// Once complete, see if ImageView is still around and set bitmap.
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(bitmap);
}
}
}
}
P.S. el ejemplo está en Java, pero los desarrolladores de C# lo pueden entender.
Fuente: http://developersdev.blogspot.ru/2014/01/weakreference-example.html
¿Su aplicación hace uso de la clase System.WeakReference específicamente? – MusiGenesis