我注销了我的任务(我删除了If以确保删除了所有任务。):
foreach (var taskA in BackgroundTaskRegistration.AllTasks)
{
//if (taskA.Value.Name == exampleTaskName)
{
taskA.Value.Unregister(true);
}
}
然后我尝试重新创建它,并检查它是否不存在:
private async void LaunchBackground()
{
await BackgroundExecutionManager.RequestAccessAsync();
foreach (var taskA in BackgroundTaskRegistration.AllTasks)
{
if (taskA.Value.Name == exampleTaskName)
{
await new ApplicationTrigger().RequestAsync();
return;
}
}
var builder = new BackgroundTaskBuilder();
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "Background.BackgroundTask";
ApplicationTrigger _AppTrigger = new ApplicationTrigger();
builder.SetTrigger(_AppTrigger);
builder.Register();
await _AppTrigger.RequestAsync();
}
我的任务现在只是一个延缓任务,并做了其他一些事情,在取消任务后释放:
public void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled);
AddWatched();
}
private void OnCanceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
{
_deferral.Complete();
}
但是,当我尝试取消和注销任务时,该任务将被暂停。当我再次启动它时,它表现得很差(我认为现在有两个实例,它们都试图同时执行相同的操作)。
理想情况下,我希望能够杀死后台任务而不是对其进行后台处理-否则,如果该任务不起作用,则如果该任务已挂起,则应将其暂停,而不要创建另一个任务,而将旧的任务也取消。 / p>
答案 0 :(得分:0)
要取消时,请从应用程序的ApplicationSettings中设置布尔值属性。 在后台任务中,请在执行过程中定期检查此属性,如果已设置,请取消该过程。