【问题标题】:Refresh data in windows store app在 Windows 商店应用程序中刷新数据
【发布时间】:2013-02-20 19:17:28
【问题描述】:

我正在创建一个有一些 web 服务调用的 Windows 商店应用程序。目前我使用一个按钮事件来进行 web 服务调用,但我希望应用程序每 5 分钟自动执行一次。 按钮事件现在放置在 MainPage.xaml.cs 执行此操作的最佳方法是什么?Windows 商店应用程序中是否有任何计时器事件?

  public async void GetWebServiceDataButton(object sender, RoutedEventArgs e)
    {
     ........
     .........
     Retrieve data from web service
    }

【问题讨论】:

    标签: c# windows-8 microsoft-metro windows-store-apps


    【解决方案1】:

    这里要粘贴的代码有点多,所以我会先添加适当的链接,我也会为那些使用 HTML/JS 的人提供。

    对于那些使用 HTML/JS 的人,请参阅: Timers using setTimeout in a Windows 8 app

    使用 cs/xaml 虽然您仍然可以为此使用 js,具体取决于您希望如何完成此操作: How to submit a work item using a timer

    对于重复计时器,请参阅: How to create a periodic work item

    现在,在您的情况下,即使应用程序未运行,您是否也需要这样做? 如果是这样,那么您将需要一个最多每 15 分钟左右运行一次的后台任务 Create and register a background task

    因此,一个基本场景如下(来自 msdn 页面),但如果您想要取消它的方法,该网站也提供了该方法。请注意,当您的应用程序被暂停或终止时,这将停止运行,即您的应用程序已关闭或不再是活动的应用程序约 5 秒钟。

    
    var period = TimeSpan.FromMinutes(5);
    
    var timer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
        {
            //do your query/work here
            Dispatcher.RunAsync(CoreDispatcherPriority.High,
            () =>
            {
               // Now that work is done, safely access UI components here to update them
            });
        }, period);
    

    【讨论】:

    • 感谢您的快速答复!起初我只需要在应用程序运行时,但后来可能也需要动态磁贴。
    • Adam 没有针对您的案例提到的另一点是,您还可以在 Resuming 处理程序中刷新。如果您有一个正在进行的计时器,那么如果您被暂停的时间超过该时间间隔,其中一个很可能会触发,但是 Resuming 处理程序无论如何都是刷新的好地方。
    • 谢谢@KraigBrockschmidt-MSFT 您能否详细说明“其中一个可能会开火”?如果应用程序被挂起,在应用程序恢复之前,这些线程不会在那个时候(或接近它)被挂起吗?
    【解决方案2】:

    您可以使用系统事件后台任务,如果您希望在您的应用未运行时使其工作。

    即使您的应用未运行,它也会至少每 15 分钟唤醒一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多