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上等待,但是我不會最大化I/O。我還遇到了一個ReaderWriterLock,它看起來可以提供幫助,但不幸的是它在Silverlight中不可用。
我該如何處理這個問題?