首页 > 解决方案 > 取消后台任务只会使其暂停

问题描述

我取消注册我的任务(我删除了 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();
    }

但是当我尝试取消和取消注册任务时,它就会暂停。当我再次启动它时,它的行为很奇怪(我认为它现在有两个实例,它们都试图同时做同样的事情)。

理想情况下,我希望能够杀死后台任务而不是将其后台运行 - 或者如果这不起作用,如果任务被挂起,它应该被取消挂起,而不是创建另一个并且旧的被取消挂起。

标签: c#uwpbackground-process

解决方案


如果要取消,请在应用程序的 ApplicationSettings 中设置布尔属性。在您的后台任务中,在执行期间定期检查此属性,如果设置,则取消该进程。


推荐阅读