繁体   English   中英

UWP C#等待加载图像

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM