2009-03-16 7 views
2

J'essaie de mettre à jour un objet Image (_browserScreenshot ci-dessous) dans XAML en changeant l'image source chaque fois qu'un événement détermine que la source doit être mise à jour. En ce moment, j'ai ceci:en utilisant BitmapSource comme source d'image dans WPF

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

J'ai un gestionnaire d'événements comme indiqué:

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

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

Maintenant, chaque fois que cet événement déclenche une nouvelle capture d'écran est prise et la source de l'image (appelée _browserScreenshot ici) le contrôle devrait être mis à jour. Je continue d'obtenir une erreur sur la modification de la propriété IsFrozen, mais je n'arrive pas à comprendre comment changer cela correctement et avoir ce travail comme je le veux. Merci d'avance à tous.

+0

Pourriez-vous ajouter des informations sur l'erreur que vous avez obtenue? Rien ne me saute aux yeux aussi horriblement mal. –

Répondre

0

Dans toute probabilité vous voulez pour geler l'objet. Le problème que vous rencontrez est que vous voulez créer un tout nouveau BitmapSource à chaque fois et laisser le garbage collector se débarrasser de l'ancienne image.

0

La ligne suivante est avéré être mon problème:

bitmapSource.Freeze();

Questions connexes