在我的应用程序中,我创建了一个类SerializableBitmapImage,它显示默认图像,而另一个图像从Internet下载.它还允许将下载的图像序列化为字节数组,因此不需要在每次应用程序启动时下载图像.我目前在"Card"类中有一个SerializableBitmapImage,它在卡数据完成下载时保存:
var resp = await AppData.API.GetCards();
if (resp != null)
{
if (AppData.CardsData == null)
AppData.CardsData = new CardsData();
AppData.CardsData.Update(resp);
AppData.SaveCards();
FillCards();
}
Run Code Online (Sandbox Code Playgroud)
但是,有时SerializableBitmapImage中的图像在调用AppData.SaveCards()时没有完成下载,导致图像无法保存.所以,我正在寻找一种延迟保存的方法,直到下载图像为止.现在,我在SerializableBitmapImage的构造函数中下载图像,如下所示:
Image = new BitmapImage(defaultUri); //set to default while downloading
BitmapImage img = new BitmapImage { CreateOptions = BitmapCreateOptions.None };
img.ImageOpened += (sender, e) => //download successful, set Image to downloaded image
{
Image = sender as BitmapImage;
NotifyPropertyChanged("Image");
};
img.UriSource = downloadUri; //download the image
Run Code Online (Sandbox Code Playgroud)
我在SerializableBitmapImage中创建了一个Task来等待图像完成,但我不确定它是否以健康的方式完成它的工作.
public async Task WaitForImageDownload()
{
while (Image == null || …Run Code Online (Sandbox Code Playgroud)