【问题标题】:UWP C# load image with awaitUWP C# 使用等待加载图像
【发布时间】:2017-02-05 16:18:03
【问题描述】:

我想在padg_load事件中加载所有图片,但是如果图片数量太多,一些listview项会显示空白,所以我需要再次手动刷新,但这不是我想要的。

如何等待所有图片加载完毕?

这是 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);
        }
    }

【问题讨论】:

    标签: c# .net async-await uwp-xaml


    【解决方案1】:

    因为像 JsonConvert.DeserializeObject 这样会导致奇怪的事情,我把它放到了任务中,现在它可以工作了,这是我的预期。

     rootObject = await Task.Run(() =>
                    {
                        return JsonConvert.DeserializeObject<Decode2Info>(text);
                    });
    

    【讨论】:

      【解决方案2】:

      问题是您没有等待您的LoadImage() 方法,因此在foreach 下面的代码执行时它们不会完成。将该方法更改为此(因为您不能 awaitvoid

      public async Task LoadImage()
      {
          // ...
      }
      

      然后这一行

      info.LoadImage();
      

      await info.LoadImage();
      

      首先启动所有必需的LoadImage()s,让它们同时运行,然后等待它们全部完成,您也很有可能获得:

      rootObject = JsonConvert.DeserializeObject<Decode2Info>(text);
      
      List<Task> tasks = rootObject.decodes.Select(LoadImage);
      
      await Task.WhenAll(tasks);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 2012-11-05
        • 2011-01-21
        • 2015-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多