后台任务定期
Background Task periodic
我正在使用 C# 和 Windows Phone 8.1 作为通用应用程序。
我有一个可以在后台运行 运行 的应用程序。这是我的背景 class:
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 小时需要一次此背景 运行 并检索我的数据。这可能吗 ?按代码是不能使用periodic的!我已经在 phone 中进行了测试,只有一次有效,然后什么也做不了。
如果我没有完成延期,有错吗?
在后台任务的微软示例中,他们使用了一个代码'ThreadPoolTimer'。就我而言,我是否需要这个?
谢谢
只需定期触发 false
:
taskBuilder.SetTrigger(new TimeTrigger(60, false));
对于单发,它必须是 true
,因此只有一个触发器。
我正在使用 C# 和 Windows Phone 8.1 作为通用应用程序。 我有一个可以在后台运行 运行 的应用程序。这是我的背景 class:
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 小时需要一次此背景 运行 并检索我的数据。这可能吗 ?按代码是不能使用periodic的!我已经在 phone 中进行了测试,只有一次有效,然后什么也做不了。 如果我没有完成延期,有错吗?
在后台任务的微软示例中,他们使用了一个代码'ThreadPoolTimer'。就我而言,我是否需要这个?
谢谢
只需定期触发 false
:
taskBuilder.SetTrigger(new TimeTrigger(60, false));
对于单发,它必须是 true
,因此只有一个触发器。