我使用C#和Windows Phone 8.1作为通用应用程序。 我有一个可以在后台运行的应用程序。这是我的Background类:
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'。在我的情况下,我需要这个吗?
Thannks
答案 0 :(得分:2)
只需定期触发false
:
taskBuilder.SetTrigger(new TimeTrigger(60, false));
对于oneshot,它必须是true
,因此只有一个触发器。