如何在代码运行时更新XAML的Image Source

时间:2014-05-06 17:47:20

标签: c# wpf xaml updates imagesource

我在代码运行时更新图像源时遇到问题。

我有一个xaml页面,其中包含一个名为ImagePack0的图像

我在xaml.cs类的开头创建了一个静态类的方法,将图像放入静态变量中,以便我可以从任何地方调用它们。

   //Put the image's in to static value's
    StaticClass.PutImageintoStatic(ImagePack0);

之后代码进行某些计算。然后当它知道应该在图像位置存储什么图像时,它会调用这个静态方法。:

    public static void PutImageIntoSource()
    {

     StaticClass.ImagePack0.Source = new BitmapImage(new Uri("\\Randomlocation\\RandomPicture.png", UriKind.Relative));

     }

我调用这个静态方法,然后执行此操作后继续进行其他计算。 现在这段代码有效。唯一的问题是xaml在我的代码停止运行时收到更新。 那么如何立即更新图像源呢?

有人有任何想法吗?

提前致谢,

1 个答案:

答案 0 :(得分:2)

您的XAML仅在您的代码完成运行时才会收到更新,因为您正在占用具有工作的UI线程(在您的情况下进行一些计算),这不会让您的XAML正确更新。

您需要将工作卸载到后台线程,并在准备好添加图像时更新UI。 假设您使用的是.NET 4.5,请使用Task库:

public void SomeMethodWithCalculation()
{   
   // offload work to background thread, and update the UI when done.
  Task.Run(() =>    StaticClass.PutImageintoStatic(ImagePack0)).ContinueWith(task => PutImageIntoSource, TaskScheduler.FromCurrentSynchronizationContex())
}

假设您正在从UI线程调用工作,TaskScheduler.FromCurrentSynchronizationContext将在该UI线程上执行延续。