每次在应用程序启动时如何强制WebClient到DownloadStringAsync

时间:2014-06-24 08:21:21

标签: c# windows-phone-8 webclient

我正在尝试编写一个从远程XML文件读取数据的RSS阅读器,问题是当我第一次运行应用程序时它正常下载但是当我更新XML文件的信息并再次运行应用程序时不下载新项目。 我在public Main()

上打电话
WebClient wc = new WebClient();
wc.DownloadStringAsync(new Uri("http://suntvhost.do.am/sunnews.xml"));
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); 

处理程序:

private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            //This simple test will return an error if the device is not connected to the internet
            if (e.Error != null)
                return;
            XElement xmlitems = XElement.Parse(e.Result);
            // We need to create a list of the elements
            List<XElement> elements = xmlitems.Descendants("item").ToList();
            // Now we're putting the informations that we got in our ListBox in the XAML code
            // we have to use a foreach statment to be able to read all the elements 
            // Description 1 , Link1 , Title1 are the attributes in the RSSItem class that I've already added
            List<RSSItem> aux = new List<RSSItem>();
            foreach (XElement rssItem in elements)
            {
                RSSItem rss = new RSSItem();
                rss.Description1 = rssItem.Element("description").Value;
                rss.Link1 = rssItem.Element("link").Value;
                rss.Title1 = rssItem.Element("title").Value;
                rss.Date1 = rssItem.Element("pubDate").Value;
                aux.Add(rss);

                TextBlock tbTitle = new TextBlock();
                tbTitle.Text = "\n" + rss.Title1;
                ListBoxRss.Items.Add(tbTitle);
             // and so on for the rest of items...
            }
        }

4 个答案:

答案 0 :(得分:3)

如果您获得相同的RSS文件,那么这可能是由于客户端缓存造成的 通过添加此HTTP-Header强制Windows Phone下载为我工作的RSS文件:

wc.Headers[ HttpRequestHeader.IfModifiedSince ] = "Sat, 29 Oct 1994 19:43:31 GMT";

答案 1 :(得分:1)

您需要做的就是:

string myUrl = "http://suntvhost.do.am/sunnews.xml?rand={0}";
...
_webClient.DownloadStringAsync(new Uri(string.Format(myUrl, DateTime.Now.Ticks)));

答案 2 :(得分:0)

我首先在之前注册事件处理程序,然后实际尝试获得一些结果。注册该事件处理程序可能为时已晚:

WebClient wc = new WebClient();
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri("http://suntvhost.do.am/sunnews.xml"));

此外,只有在出现错误时返回并不能轻松诊断任何问题,做一些事情将其写入日志文件等。

答案 3 :(得分:0)

问题是WebClient正在缓存数据。

更多相关信息: C# WebClient disable cache