博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Phone 8.1 后台任务
阅读量:6092 次
发布时间:2019-06-20

本文共 2353 字,大约阅读时间需要 7 分钟。

Windows Phone 8.1 应用可以添加多个后台任务,以辅助应用完成某些任务。

(1)新建前台应用

后台任务是依托于前台应用的,所以必须拥有一个前台应用。

该前台应用的功能很简单,就是读取文件中保存的文本;而后台任务就是将当前时间写入文件中。

前台界面:

打开应用时就读取文本信息:

protected override async void OnNavigatedTo(NavigationEventArgs e){    await ShowFileText();}private async Task ShowFileText(){    file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Time.txt", CreationCollisionOption.OpenIfExists);    timeTextBlock.Text = await FileIO.ReadTextAsync(file);}

 

(2)添加一个 Windows Runtime Component 项目

后台任务必须为 Windows Runtime Component。

 

(3)编写一个继承自 IBackgroundTask 接口的类

在后台任务的项目中新建一个类,并继承 IBackgroundTask 接口,实现 Run 方法,该类还必须为 sealed:

public sealed class WritingTask: IBackgroundTask{    public async void Run(IBackgroundTaskInstance taskInstance)    {        var deferral = taskInstance.GetDeferral();        await WriteTimeToFile("Time.txt");        deferral.Complete();    }  private async Task WriteTimeToFile(string path)  {        var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(path, CreationCollisionOption.ReplaceExisting);        await FileIO.WriteTextAsync(file, DateTimeOffset.Now.ToString());    }}

Run 方法就是后台任务执行时的方法。

 

(4)前台应用 Manifest 中添加后台任务

可以设置触发器的类型,记得设置后台任务的入口点。

然后前台应用添加后台任务项目的引用。

 

(5)前台应用对后台任务进行注册与解除注册

最后的一步也就是在前台应用中对后台任务进行注册了:

private async void registerButton_Click(object sender, RoutedEventArgs e){    BackgroundExecutionManager.RemoveAccess();    await BackgroundExecutionManager.RequestAccessAsync();    RegisterTask();}private static void RegisterTask(){    SystemTrigger triger = new SystemTrigger(SystemTriggerType.TimeZoneChange, false);    BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();    taskBuilder.Name = "WritingTask";    taskBuilder.SetTrigger(triger);    taskBuilder.TaskEntryPoint = typeof(ZMyBackgroundTasks.WritingTask).FullName;    taskBuilder.Register();}

这里选择的触发器为“当时区改变时”,这只是为了方便测试,你可以根据需要自行选择。

解除注册的方法为:

private void unregisterButton_Click(object sender, RoutedEventArgs e){    var task = BackgroundTaskRegistration.AllTasks.Values.First();    task.Unregister(true);    BackgroundExecutionManager.RemoveAccess();}

转载于:https://www.cnblogs.com/xiaoshi3003/p/3763281.html

你可能感兴趣的文章
Chrome浏览器播放HTML5音频没声音的解决方案
查看>>
easyui datagrid 行编辑功能
查看>>
类,对象与实例变量
查看>>
HDU 2818 (矢量并查集)
查看>>
【转】php字符串加密解密
查看>>
22. linux 常用命令
查看>>
ASP.Net 使用GridView模板删除一行的用法
查看>>
(十六)字段表集合
查看>>
团队项目成员和题目
查看>>
最小表示法
查看>>
JPGraph
查看>>
navicat for mysql 10.0.11 注册码
查看>>
Java中this和super的用法总结
查看>>
缩小分区内存,加到其它分区
查看>>
Java私塾基础note
查看>>
ORACLE权限管理—创建只读账号
查看>>
设计模式总结
查看>>
java游戏服务器 建造者模式
查看>>
Python sys.argv[] 的用法
查看>>
react
查看>>