开发笔记

Win10 UWP添加定时触发的进程外后台任务

添加后台任务是开发app,必需的功能。比如动态磁贴就需要后台任务的支持。但是怎么添加后台任务?添加后台任务后为什么不触发?还是有小伙伴遇到这样的问题。所以写下了这篇文章,记录如何快速简单的添加后台任务。

一、新建解决方案

1、新建windows通用项目,命名为“BackgroundTaskDemo”

2、在解决方案资源管理器,右键解决方案,选择”添加“-”新建项目“,新建windows运行时组件。命名为”BackgroundTasks“,应用内所有的后台任务都写在这里面。

3、删掉默认的class1.cs,新建一个类,命名为“ToastBackgroundTask”

二、配置后台任务

1、在”BackgroundTaskDemo”中,打开“Package.appxmanifest”,按下图设置。

三、写后台事件的类

1、由于很多方法在windows运行组件里是不能写的,所以这里单独新建一个类库项目。

2、新建一个类,命名为”ToastBackgroundTaskHelper“,这里是做了一个Toast通知。代码如下:(需要安装Nuget:”Microsoft.Toolkit.Uwp.Notifications“)

using Microsoft.Toolkit.Uwp.Notifications;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.UI.Notifications;

namespace BackgroundTaskShare
{
    public class ToastBackgroundTaskHelper
    {

        public static void PopToast()
        {
            // Generate the toast notification content and pop the toast
            ToastContent content = GenerateToastContent();
            ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(content.GetXml()));
        }

        public static ToastContent GenerateToastContent()
        {
            return new ToastContent()
            {
                Launch = "action=viewEvent&eventId=1983",
                Scenario = ToastScenario.Reminder,

                Visual = new ToastVisual()
                {
                    BindingGeneric = new ToastBindingGeneric()
                    {
                        Children =
                {
                    new AdaptiveText()
                    {
                        Text = "Adaptive Tiles Meeting"
                    },

                    new AdaptiveText()
                    {
                        Text = "Conf Room 2001 / Building 135"
                    },

                    new AdaptiveText()
                    {
                        Text = "10:00 AM - 10:30 AM"
                    }
                }
                    }
                },

                Actions = new ToastActionsCustom()
                {
                    Inputs =
            {
                new ToastSelectionBox("snoozeTime")
                {
                    DefaultSelectionBoxItemId = "15",
                    Items =
                    {
                        new ToastSelectionBoxItem("1", "1 minute"),
                        new ToastSelectionBoxItem("15", "15 minutes"),
                        new ToastSelectionBoxItem("60", "1 hour"),
                        new ToastSelectionBoxItem("240", "4 hours"),
                        new ToastSelectionBoxItem("1440", "1 day")
                    }
                }
            },

                    Buttons =
            {
                new ToastButtonSnooze()
                {
                    SelectionBoxId = "snoozeTime"
                },

                new ToastButtonDismiss()
            }
                }
            };
        }

    }
}

四、处理 ToastBackgroundTask

1、要调用 ToastBackgroundTaskHelper 里面的方法,首先需要在BackgroundTasks中添加对BackgroundTaskShare的引用。

2、处理ToastBackgroundTask.cs,代码如下,

using Microsoft.Toolkit.Uwp.Notifications;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Background;

namespace BackgroundTasks
{
    // 记得要加sealed
    public sealed class ToastBackgroundTask:IBackgroundTask
    {
        public void Run(IBackgroundTaskInstance taskInstance)
        {
            var defferral = taskInstance.GetDeferral();
            // 这里写你的后台操作,操作耗时如果超过5秒就失败了,有异步操作的记得加async
            BackgroundTaskShare.ToastBackgroundTaskHelper.PopToast();

            defferral.Complete();
        }

       

    }
}

五、注册和取消后台任务

1、首先在BackgroundTaskDemo中添加对“BackgroundTasks”的引用。

2、在 BackgroundTaskDemo中安装Nuget:“Microsoft.Toolkit.Uwp”,使用如下方法进行注册和取消后台任务。

// 注册 
BackgroundTaskRegistration registered =                    BackgroundTaskHelper.Register(typeof(BackgroundTasks.ToastBackgroundTask),new TimeTrigger(15, false), false, true, new SystemCondition(SystemConditionType.InternetAvailable));

// 取消
BackgroundTaskHelper.Unregister(typeof(BackgroundTasks.ToastBackgroundTask));

上面设置为在有网络的情况下每15分钟触发一次后台任务。

六、调试后台任务

1、运行Demo后注册后台任务,稍等一会儿,点开VS的生命周期事件,就可以看到ToastBackgroundTask。需要调试的话就可以在 ToastBackgroundTask 中设置断点。

2、点击后就会立刻运行后台任务,结果如下。说明代码是没有问题的。

这样子就大功告成了。需要的可以下载Demo。

七、Demo下载

展开阅读全文

Win10 UWP GridView和ListView列表虚拟化问题

上一篇

CentOS7安装最新版BBR内核 备份

下一篇

你也可能喜欢

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
Win10 UWP添加定时触发的进程外后台任务

长按储存图像,分享给朋友