繁体   English   中英

使用 WP7 下载和解析多个 XML 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM