Domanda

Sto cercando di aggiornare un oggetto Image (_browserScreenshot di seguito) in XAML modificando l'immagine di origine ogni volta che un evento determina che è necessario aggiornare l'origine. In questo momento ho questo:

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;
}

Quindi ho un gestore di eventi come mostrato:

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

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

Ora ogni volta che viene generato questo evento viene acquisito un nuovo screenshot e la fonte del controllo Image (qui chiamato _browserScreenshot) dovrebbe essere aggiornata. Continuo a ricevere un errore sulla modifica corretta di IsFrozen, ma non riesco a capire come cambiarlo correttamente e fare in modo che funzioni nel modo desiderato. Grazie in anticipo a tutti.

È stato utile?

Soluzione

Con ogni probabilità vuoi congelare l'oggetto. Il problema che stai riscontrando è che vuoi creare una BitmapSource completamente nuova ogni volta e lasciare che il garbage collector disponga della vecchia immagine.

Altri suggerimenti

La seguente riga si è rivelata il mio problema:

bitmapSource.Freeze ();

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top