2017-02-05 7 views
0

padg_loadイベントですべてのイメージをロードしたいが、イメージの数が多すぎると、リストビューの項目によって空白が表示されるため、手動で再度リフレッシュする必要がある私が望むものではありません。UWP C#load image with await

すべての画像がロードされるのを待つ方法はありますか?ここ

は、クラスのメソッドを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); 
     } 
    } 

答えて

0

それは以来JsonConvert.DeserializeObjectは奇妙なことが発生するような、私はタスクに入れて今、それは私の期待していた動作します。

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

問題は、あなたのLoadImage()方法を待っていないということですので、彼らは時間によってforeach実行以下のコードを完了していません。

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

voidawaitないことができますように)これにその方法を変更してから、このライン

info.LoadImage(); 

await info.LoadImage(); 

へのチャンスはまた、あなたが初めで得ることができます良いです必要なものはすべて LoadImage()です。まず、それらを同時に実行させてから、すべてが完了するまで待ってください:

rootObject = JsonConvert.DeserializeObject<Decode2Info>(text); 

List<Task> tasks = rootObject.decodes.Select(LoadImage); 

await Task.WhenAll(tasks);