Я столкнулся с немного запутанной проблемой, и я не уверен, что проблема в том, что я не знаю о делегате WebClient "OpenReadCompletedEvent", или если есть проблема с моим выбранным решением, используемым на моемсерверные сценарии, с которыми приложение взаимодействует.
Вот моя проблема:
У меня есть класс, который определяет название видеоигры, я использую WebClient для асинхронного открытия RSS-канала для чтения, который, когда завершено, продолжает извлекать предоставленную пользователем информацию об этом заголовке, используя тот же метод.Для этого я перебираю каждое название видеоигры, проанализированное из RSS-канала (RSS-канал GameStop.com для будущих игр), здесь я сталкиваюсь с проблемами, у меня нет возможности синхронизировать все эти делегаты OpenReadCompletedEvent, илиничего такого, о чем я знаю.
Прямо сейчас мой код становится смущающим и запутанным, и я считаю, что это неверно: Примечание: игры - это список объектов Game.
List<Thread> threads = new List<Thread>();
for(int i = 0; i < games.Count; i++)
{
threads.Add(new Thread(downloadHype));
threads[i].Start(i);
}
public void downloadHype(object data)
{
int index = (int)data;
String tempUrl = String.Format("http://slyduck.com/hypemachine/frontend.php?intent=2&guid={0}", games[index].GuidString);
WebClient client = new WebClient();
client.OpenReadAsync(new Uri(tempUrl));
client.OpenReadCompleted += new OpenReadCompletedEventHandler(
delegate(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
XDocument xdoc = XDocument.Load(e.Result);
games[index].Hype = (from item in xdoc.Descendants("hype")
select new Hype()
{
Id = uint.Parse(item.Element("id").Value),
GameId = uint.Parse(item.Element("game_id").Value),
UserId = uint.Parse(item.Element("user_id").Value),
Score = (uint.Parse(item.Element("score").Value) == 1)
}).ToList();
}
});
}
IsЕсть ли более простой способ для меня это организовать?Я рассмотрел возможность отправки массива игровых указателей в качестве параметра GET или POST, чтобы уменьшить количество мусора, создаваемого при создании такого количества WebClients, но я не уверен, является ли это правильным решением.
I 'Мы изучили классы Synchronization и Parallel, однако они не доступны в .NET-реализации SilverLight.
Любая помощь будет принята с благодарностью.Спасибо!