1

Silverlightアプリケーションでは、大量のファイルをダウンロードする必要があります。ファイルのダウンロードが終了したら、ObservableCollectionオブジェクトを更新する必要があります。Silverlightで単一ObservableCollectionにアクセスする複数の非同期メソッド

private void downloadFiles(List<string> files) 
{ 
    foreach (var file in files) 
    { 
     string _file = file; 

     new WebClient().OpenReadTaskAsync(new Uri(_file)).ContinueWith(t1 => 
     { 
      Stream stream = t1.Result; 
      byte[] buffer = new byte[stream.Length]; 
      stream.ReadAsync(buffer, 0, (int)stream.Length).ContinueWith(t2 => 
      { 
       myObservableCollection.Add(_file); //An Exception is thrown.      
      }); 
     }); 
    } 
} 

をmyObservableCollection例外がスローされるに追加しようとすると::
がて、CollectionChangedかにPropertyChangedイベント中のObservableCollectionに変更することはできませんこれは私が使用していたコードです。

それぞれのOpenReadTaskAsyncで待つべき解決方法の1つですが、I/Oを最大化することはありません。私はまた、それが助けることができるように見えるReaderWriterLockに出くわしましたが、残念ながらそれはSilverlightでavaibleではありません。

この問題はどのように処理できますか?

答えて

0

あなたはこれを使用してUIスレッドでObservableCollectionを更新シリアライズできます

string _file = file; 
var ui = TaskScheduler.FromCurrentSynchronizationContext(); 

... 

.ContinueWith(t2 => 
    { 
     myObservableCollection.Add(_file); //An Exception is thrown.      
    } 
    , ui); 
関連する問題