1

我正在尝试构建一个小型桌面记分牌,它可以在 C# 中获取和显示现场比赛得分。现在,当我在单击按钮时调用 Xdocument.load(url) 方法时,它仅第一次加载最新分数,然后即使 Xdocument.load() 被定义为在按钮单击时运行(以及何时运行),它也会继续显示相同的分数表单加载,但我认为这不会有所作为)。现在我在 google 和 stackoverflow 上发现的内容类似于查看文件何时更新以及相关内容。但所有这些都是针对本地 xml 文件的。我该如何解决我的问题?

     public Form1()
    {
        InitializeComponent();
       // WebRequest.DefaultCachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate);   
        feed = XDocument.Load(url);


    }

    private void button1_Click(object sender, EventArgs e)
    {
        feed = XDocument.Load(url + "?_=" + Guid.NewGuid().ToString());
         feed=XDocument.Load(url);
       // var nofmlive = feed.Root.Element("match").Attribute("srs");
        var output = GetItems();
        foreach (var v in output) {
       //rest of the code,,just to get and show data of all matches which are currently live
4

1 回答 1

4

也许XDocument正在缓存数据。尝试通过附加一个 Guid 查询字符串参数来破坏缓存:

var doc = XDocument.Load(url + "?_=" + Guid.NewGuid().ToString());

如果您在 url 中已经有查询字符串参数,请调整?with 。&

您也可以尝试更改缓存策略,但这种方法的缺点是它对所有 HTTP 请求都是全局的:

WebRequest.DefaultCachePolicy = new RequestCachePolicy(RequestCacheLevel.Revalidate);
var doc = XDocument.Load(url);

或者,您可以尝试使用 WebClient 加载 XML,然后将其提供给 XDocument:

using (var client = new WebClient())
{
    string xml = client.DownloadString("http://synd.cricbuzz.com/j2me/1.0/livematches.xml?_=" + Guid.NewGuid().ToString());
    var doc = XDocument.Parse(xml);
}
于 2012-09-18T16:11:31.353 回答