我有一个 WPF 标记扩展,负责按名称检索图像,返回一个BitmapImage
对象。
<Image Source="{my:ImageProvider ImageName=myImageName}"></Image>
由于检索图像是一项可能需要几秒钟的操作,因此我想显示默认图像并在准备好后显示请求的图像。
我试图做的是这样的事情,但由于这可能会改变BitmapImage
对象,它不会更新 UI(示例代码):
BitmapImage img;
public override object ProvideValue(IServiceProvider serviceProvider)
{
img = new BitmapImage(new Uri(@"D:\defaultImage.png", UriKind.Absolute));
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
bw.RunWorkerAsync();
return img;
}
void bw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
img.UriSource = new Uri(@"D:\actualImage.png", UriKind.Absolute);
}
有没有一种方法可以更新 UI 以使用修改后的BitmapImage
(例如 INotifyPropertyChanged),或者是否有不同的方法来实现这一点?