Pregunta

Estoy tratando de actualizar un objeto Image (_browserScreenshot a continuación) en XAML cambiando la imagen fuente cada vez que un evento determina que la fuente necesita actualizarse. En este momento tengo esto:

public BitmapSource GetScreen()
{
    Bitmap bitmap = new Bitmap(app.Browser.ClientRectangle.Width, app.Browser.ClientRectangle.Height);
    app.Browser.DrawToBitmap(bitmap, app.Browser.Bounds);

    BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

    bitmapSource.Freeze();

    bitmap.Dispose();
    bitmap = null;
    return bitmapSource;
}

Entonces tengo un controlador de eventos como se muestra:

app.BitmapSource.Changed += new EventHandler(BitmapSource_Changed);

void BitmapSource_Changed(object sender, EventArgs e)
{
    Window1._browserScreenshot.Source = app.GetScreen();
}

Ahora, cada vez que se dispara este evento, se toma una nueva captura de pantalla y se debe actualizar la fuente del control Image (llamado _browserScreenshot aquí). Sigo recibiendo un error acerca de cambiar la propiedad de IsFrozen, pero no puedo entender cómo cambiar esto correctamente y hacer que funcione de la manera que quiero. Gracias de antemano a todos.

¿Fue útil?

Solución

Con toda probabilidad, quiere congelar el objeto. El problema que tiene es que desea crear un BitmapSource completamente nuevo cada vez y dejar que el recolector de basura elimine la imagen anterior.

Otros consejos

La siguiente línea resultó ser mi problema:

bitmapSource.Freeze ();

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top