每分钟更新平铺图像Windows 8应用程序

时间:2013-07-29 10:36:03

标签: c# xml windows-8 windows-store-apps periodic-task

嗨,我需要每分钟更新一次瓷砖的图像,但我找不到任何解决方案。我看过this,但我无法让它发挥作用。

图块中的图片从网络加载两次,但之后不再加载;如何每分钟更新瓷砖中的图像?

例如:Here,我的磁贴和数字是网络服务器上的图像,我需要每分钟刷新一次这些图像,包含任何新图像。

 public static void CreateSchedule()
    {




        var tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();
        var plannedUpdated = tileUpdater.GetScheduledTileNotifications();


        DateTime now = DateTime.Now;
        DateTime planTill = now.AddHours(4);

        string src1 = "http://mysite/squareLogo128.png";

        DateTime updateTime = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0).AddMinutes(1);
        if (plannedUpdated.Count > 0)
            updateTime = plannedUpdated.Select(x => x.DeliveryTime.DateTime).Union(new [] { updateTime }).Max();



        string xml = "<tile>"
                         + "<visual>"
                         + "<binding template='TileWideImageAndText01'>"
                         + "<text id='1'>This tile notification uses web images</text>"
                         + "<image id='1' src='" + src1 + "' alt='Web image'/>"
                         + "</binding>"
                         + "<binding template='TileSquareImage'>"
                         + "<image id='1' src='" + src1 + "' alt='Web image'/>"
                         + "</binding>"
                         + "</visual>"
                         + "</tile>";

        XmlDocument documentNow = new XmlDocument();
        documentNow.LoadXml(xml);

        tileUpdater.Update(new TileNotification(documentNow) { ExpirationTime = now.AddMinutes(1) });
        for (var startPlanning = updateTime; startPlanning < planTill; startPlanning = startPlanning.AddMinutes(1))
        {
            Debug.WriteLine(startPlanning);
            Debug.WriteLine(planTill);

            try
            {
                string src2 = "http://mysite/squareLogo128.png";
                string xml2 = "<tile>"
                        + "<visual>"
                        + "<binding template='TileWideImageAndText01'>"
                        + "<text id='1'>This tile notification uses web images</text>"
                        + "<image id='1' src='" + src2 + "' alt='Web image'/>"
                        + "</binding>"
                        + "<binding template='TileSquareImage'>"
                        + "<image id='1' src='" + src2 + "' alt='Web image'/>"
                        + "</binding>"
                        + "</visual>"
                        + "</tile>";

                XmlDocument document = new XmlDocument();
                document.LoadXml(xml2);

                ScheduledTileNotification scheduledNotification = new ScheduledTileNotification(document, new DateTimeOffset(startPlanning)) { ExpirationTime = startPlanning.AddMinutes(1) };
                tileUpdater.AddToSchedule(scheduledNotification);


            }
            catch (Exception e)
            {
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

我在这里假设你看到了Debug.WriteLine输出,并且你已经确认你没有吞掉空catch中的例外。

您是否尝试过Fiddler?由于你一遍又一遍地请求相同的图像,我想知道它是否是从本地缓存中提供的(尽管为什么你会看到正确的两次有点神秘)。

如果您使用随机查询字符串,请说

string src2 = "http://mysite/squareLogo128.png" + "?" + Guid.NewGuid().ToString();

可能会欺骗缓存(并且是一个快速测试,看看这可能是问题)。如果它(并且它不是你可以控制的AFAIK),更好的选择是在图像检索(通过服务)上设置响应头,该头将设置适当的无缓存头;否则,你正在用永远不会重复使用的图像填充缓存。

请查看my blog post on image handling with notifications,特别是“云中的图片”部分,了解更多内容。