取消后台任务只会使其暂停

时间:2018-11-29 12:05:38

标签: c# uwp background-process

我注销了我的任务(我删除了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>

1 个答案:

答案 0 :(得分:0)

要取消时,请从应用程序的ApplicationSettings中设置布尔值属性。 在后台任务中,请在执行过程中定期检查此属性,如果已设置,请取消该过程。