更新SIlverlight 4.0下的WPF图像问题

时间:2012-01-10 14:58:08

标签: c# silverlight-4.0

当我的页面加载并按button1时,我可以获取图像并可以看到它。

但是当我第二次点击它时根本不起作用。我调试了它button1_Click(...),我确信imageData != null

我真的无法弄清楚是什么......请帮助我!

private void button1_Click(object button, RoutedEventArgs e)
{
    Guid sid = Guid.Parse("087462df-e4b6-484c-879e-cccc37b4c1f4");
    EntityQuery<Screenshot> screen = this._myDomainContext.GetScreenshotQuery(sid);
    this._myDomainContext.Load(screen).Completed += (sender, args) =>
    {
        try
        {
            byte[] imageData = (((LoadOperation<Screenshot>)sender).Entities.FirstOrDefault()).Screen;
            if (imageData != null)
            {
                BitmapImage img = Utilities.Graphics.GetImage(imageData);
                img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;

                image1.Source = null;
                image1.Source = img;
            }
        }
        catch
        {
        }

    };
}

public static BitmapImage GetImage(byte[] rawImageBytes)
{
    BitmapImage imageSource = null;

    try
    {
        using (MemoryStream stream = new MemoryStream(rawImageBytes))
        {
            stream.Seek(0, SeekOrigin.Begin);
            BitmapImage b = new BitmapImage();
            b.SetSource(stream);
            imageSource = b;    
        }
    }
    catch  
    {
    }

    return imageSource;
}

2 个答案:

答案 0 :(得分:1)

尝试更改Load的重载:


this._myDomainContext.Load(screen, LoadBehavior.RefreshCurrent, true).Completed+= ...

答案 1 :(得分:0)

如果你的问题,我不能完全确定原因,但我对使用BitmapImage的代码有一些指示。

  1. 在为image1.Source属性赋予实际来源之前,无需将其设置为null
  2. 如果控件试图从中读取,请不要将传递的流处理到BitmapImage
  3. 在使用BitmapImage时,我个人使用BeginInit(...)StreamSourceEndInit(...)