В приложении 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 выбрасывается исключение:
Невозможно изменить ObservableCollection во время события CollectionChanged или PropertyChanged.
Один из способов исправить это дождаться каждого OpenReadTaskAsync, но тогда я не буду максимизировать ввод-вывод.Я также натолкнулся на ReaderWriterLock, который, похоже, может помочь, но, к сожалению, его нет в Silverlight.
Как мне решить эту проблему?