[英]UWP C# load image with await
我想在padg_load事件中加载所有图像,但是如果图像数量太多,某些列表视图项将显示空白,因此我需要手动重新刷新,但这不是我想要的。
如何等待所有图像加载完毕?
这是Page_load中的代码
rootObject = JsonConvert.DeserializeObject<Decode2Info>(text);
foreach (Decode1Info info in rootObject.decodes)
{
info.LoadImage();
}
collection = new ObservableCollection<Decode1Info>(rootObject.decodes);
SListView.ItemsSource = collection;
progressView.IsActive = false;
loadImage是该类中的方法
public async void LoadImage()
{
try
{
StorageFile file =
await ApplicationData.Current.LocalFolder.GetFileAsync(imageName);
this.ImageSource = new BitmapImage();
FileRandomAccessStream stream =
(FileRandomAccessStream)await file.OpenAsync(FileAccessMode.Read);
await ImageSource.SetSourceAsync(stream);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
因为它像JsonConvert.DeserializeObject一样引起了奇怪的事情,所以我将其放入Task中,现在它可以正常工作了。
rootObject = await Task.Run(() =>
{
return JsonConvert.DeserializeObject<Decode2Info>(text);
});
问题是您没有等待LoadImage()
方法,因此在执行foreach
下面的代码时,它们还没有完成。 将该方法更改为此(因为您无法await
void
)
public async Task LoadImage()
{
// ...
}
然后这条线
info.LoadImage();
至
await info.LoadImage();
通过首先启动所有必需的LoadImage()
,让它们并发运行,然后等待它们完成,您也有机会获得好处:
rootObject = JsonConvert.DeserializeObject<Decode2Info>(text);
List<Task> tasks = rootObject.decodes.Select(LoadImage);
await Task.WhenAll(tasks);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.