【发布时间】: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