[英]Downloading & Parsing Multiple XML Files using WP7
我遇到了一些令人困惑的问题,我不确定问题是我不知道 WebClient“OpenReadCompletedEvent”委托,还是我在服务器端脚本上使用的选择的解决方案有问题,应用程序与之交互。
这是我的问题:
我有一个 class 定义了一个视频游戏标题,我使用 WebClient 异步打开一个 RSS 提要进行阅读,完成后继续使用相同的方法获取用户提交的有关该标题的信息。 为此,我遍历从 RSS 提要(GameStop.com 即将推出的游戏的 RSS 提要)解析的每个视频游戏标题,这就是我遇到问题的地方,我无法让所有这些 OpenReadCompletedEvent 代表保持同步,或者我不知道。
现在我的代码变得令人尴尬和复杂,我认为这是不正确的:注意:游戏是游戏对象的列表。
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();
}
});
}
有没有更简单的方法来组织这个? 我考虑了将游戏指南数组作为 GET 或 POST 参数发送的可能性,以减轻创建这么多 WebClient 产生的一些垃圾,但我不确定这是否是正确的解决方案。
我研究了同步类和并行类,但是它们在 SilverLight 的 .NET 实现中不可用。
任何帮助将不胜感激。 谢谢!
你产生了太多的线程。 请记住,一个新线程会立即消耗 1MB 的虚拟地址空间。
如果您有一个具有 ID (GUID) 的用户,请通过 guid 获取数据(如您所知),但您的 XML 应该作为炒作列表,而不仅仅是一个列表。
换句话说,使用 XML 的不同结构。 然后你只需要一个背景线程和一个 WebClient 来获取整个列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.