Я надеялся, что кто-нибудь сможет пролить свет на кажущуюся сложной проблему, с которой я сталкиваюсь при асинхронной загрузке веб-клиента в silverlight.Вот подробности моей проблемы -
Загрузка многостраничного веб-запроса XML.Перемещен код веб-клиента во вспомогательный класс для отслеживания каждого отдельного запроса.Вспомогательный класс называется SyncJobsClass.Источник для этого класса: (http://www.silvergeek.net/silverlight/running-async-tasks-synchronously-events-delegates/)
Имеется кнопка загрузки для запуска задачи -
void button1_Click(object sender, RoutedEventArgs E)
{
var req = new RequestClass;
req.GetXMLPages();
}
Вот класс запроса -
Public Class RequestClass
{
readonly SyncJobsClass _syncJobs = new SyncJobsClass();
Public void GetXMLPages()
{
_syncJobs += new SyncJobsElementCompleted;
_syncJobs += new SycJobsWorkCompleted;
var pages = 10
for(var i=0;i<10;i++)
{
//load each request into list in _syncjobs class
var url ="www.blahblahblah.com" + i;
_syncJobs.DownloadFiles(url);
}
//start download of each page in list
_syncJobs.StartDownload();
}
}
Так как выпосле этого шага я вижу очередь страниц, загружаемых асинхронно. Когда страницы завершаются, я передаю их в формататор XML Linq, а затем связываю полученные данные с моей моделью представления.
void SyncJobsElementCompleted(string result)
{
if(result == "error")return;
//send data to XML linq parser and add to observable collection for viewmodel.
App.ViewModel.LoadData(result);
}
Проблема заключается вбольшие загрузки, если я создаю новый экземпляр GetXMLPages () нажатием кнопки загрузки, предыдущая загрузка еще не завершена, и я получаю смешанные результаты в модели просмотра. Я попытался изменить событие кнопки на -
void button1_Click(object sender, RoutedEventArgs E)
{
var req = new RequestClass;
//Clear view model before download
App.Viewmodel.List.Clear()
// now get pages
req.GetXMLPages();
}
Ну, это не работает, так как загрузка все еще идет в другом потоке ..
Попробовал boolen, но это будет допустимо только для этого экземпляра RequestClass, который воссоздается при каждом нажатии кнопки ..
Как я могу предотвратить запуск другой загрузки перед созданием нового запроса? Если вам нужно больше деталей, дайте мне знать. Любая помощь будет очень полезнаоценили.