我想为我的UWP应用程序使用后台任务。
以下代码是我在Windows Mobile中的后退按钮点击事件:
private async void MainPage_BackRequested(object sender, BackRequestedEventArgs e)
{
var access= await BackgroundExecutionManager.RequestAccessAsync();
var task = new BackgroundTaskBuilder
{
Name="My task",TaskEntryPoint=typeof(backGroundTask.Class1).ToString()
};
trigger = new ApplicationTrigger();
task.SetTrigger(trigger);
task.Register();
//var result = await trigger.RequestAsync();
if (Frame.CanGoBack)
{
Frame.GoBack();
e.Handled = true;
}
}
public void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
clearData();
count1 = 0;
getDownloadedSongs();
dispatcherTimer1.Tick += DispatcherTimer1_Tick;
dispatcherTimer1.Interval = new TimeSpan(0, 0, 3);
dispatcherTimer1.Start();
_deferral.Complete();
}
DispatcherTimer dispatcherTimer1 = new DispatcherTimer();
private async void DispatcherTimer1_Tick(object sender, object e)
{
try
{
clearData();
}
catch (Exception ex)
{
}
}
但是当我点击后退按钮时,此代码无效。根据期望,后台任务代码应该可以工作,但它不起作用。我做错了什么?
答案 0 :(得分:0)
在DispatcherTimer有机会执行之前,您的后台任务正在退出,因为您将Deferral标记为已完成。您应该继续执行延迟,直到后台任务中的所有工作都已完成(或直到您从系统收到TaskCanceled事件)。