【问题标题】:Background Task periodic后台任务周期
【发布时间】:2015-03-30 14:52:18
【问题描述】:

我使用 C# 和 Windows Phone 8.1 作为通用应用程序。 我有一个可以在后台运行的应用程序。这是我的背景类:

 public sealed class RTask : IBackgroundTask
 {
     BackgroundTaskDeferral deferral_;
     public async void Run(IBackgroundTaskInstance taskInstance)
     {
         Debug.WriteLine("Background started");
         deferral_ = taskInstance.GetDeferral();
         Debug.WriteLine("GetDeferral");


         Debug.WriteLine("Retrieving data from url...");
         HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://mysite"));
         HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
         string pageSource = new StreamReader(response.GetResponseStream()).ReadToEnd();
         Debug.WriteLine("PageSource Retrieved");
         pageSource = (System.Net.WebUtility.HtmlDecode(pageSource));
         pageSource = pageSource.Replace("\"", "'");
         //ParseHtml(pageSource);
         deferral_.Complete();
     }
 }

这是我注册后台的注册码:

    private async void RegisterBtn_Click(object sender, RoutedEventArgs e)
    {
        string myTaskName = "RTask";
        foreach (var cur in BackgroundTaskRegistration.AllTasks)
        {
            Debug.WriteLine("cur.Value.Name:   " + cur.Value.Name);
            if (cur.Value.Name == myTaskName)
            {
                await (new MessageDialog("Task already registered")).ShowAsync();
                return;
            }
        }
        await BackgroundExecutionManager.RequestAccessAsync();
        BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder { Name = "RTask", TaskEntryPoint = "MyTask.RTask" };
        taskBuilder.SetTrigger(new TimeTrigger(15, true));
        BackgroundTaskRegistration myFirstTask = taskBuilder.Register();

        await (new MessageDialog("Task registered")).ShowAsync();
    }

我需要每 1 小时在后台运行一次并检索我的数据。这可能吗 ?根据代码它不能使用周期性!我已经在手机中进行了测试,只有一次可以正常工作,然后什么也做不了。 如果我没有完成延期,有问题吗?

在后台任务的 Microsoft 示例中,他们使用了代码“ThreadPoolTimer”。就我而言,我需要这个吗?

谢谢

【问题讨论】:

    标签: c# windows-phone-8.1 win-universal-app


    【解决方案1】:

    只需定期触发false

    taskBuilder.SetTrigger(new TimeTrigger(60, false));
    

    对于 oneshot,它必须是 true,因此只有一个触发器。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2020-10-30
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2021-08-09
      相关资源
      最近更新 更多