[Windows Phone] 为应用添加后台计划任务 – Scheduled Task Agent

前段时间做过一个天气应用,一直是只支持前台获取数据,上周末参加了Windows Phone的CodeJam和高手们交流了一下,发现实现后台定时更新功能也不是很难,于是在网上找一些资料,在找资料的过程中发现,网上的一些文章和代码把这个本来很简单代码能实现的功能描述的很复杂,结合了很多无关功能,这就让刚接触Scheduled Task Agent的朋友觉得很难找到关键代码,所以我写这篇文章让大家用最少的代码实现主题功能。

首先说一下我的需求,其实很简单,我就是要在后台定时能执行一段代码而已,下面的例子即可实现,各位开发者可以在之上扩展得到自己想要的功能。

1. 创建Windows Phone Silverlight Application项目:

image

2. 再创建一个基于Windows Phone Scheduled Task Agent的项目:

image

3. App是我们的主程序,Scheduled是后台定时任务代理程序:

image

4. 我们打开ScheduledAgent.cs这个文件,用下面代码替换掉OnInvoke方法:

 

public static string PERIODICTASKNAME = "PeriodicTaskTest";
/// <summary> 
/// Agent that runs a scheduled task 
/// </summary> 
/// <param name="task"> 
/// The invoked task 
/// </param> 
/// <remarks> 
/// This method is called when a periodic or resource intensive task is invoked 
/// </remarks> 
/// 
protected override void OnInvoke(ScheduledTask task) 

    //TODO: Add code to perform your task in background 
    if (task.Name == PERIODICTASKNAME) 
    { 
        ShellToast toast = new ShellToast(); 
        toast.Title = "Good: "
        toast.Content = "Get the Service!"
        toast.Show(); 
    } 
    else 
    { 
        //如果不是指定的task, 則代表不需要執行 
    } 
    ScheduledActionService.LaunchForTest(PERIODICTASKNAME, TimeSpan.FromSeconds(10));
    NotifyComplete(); 
}

 

以上代码主要的功能是让这个代理每隔10秒弹出如下提示:

image

这样代理端的代码就编写完成,就这么简单的代码,按照自己的需求在OnInvoke方法里添加自己的后台更新逻辑即可,接着就来编写前端代码。

5. 在MainPage.xaml中添加两个按钮:

image

 

<Button Content="Start Agent" Height="72" HorizontalAlignment="Left" Margin="118,207,0,0" Name="button1" VerticalAlignment="Top" Width="211" Click="button1_Click" /> 
<Button Content="Stop Agent" Height="72" HorizontalAlignment="Left" Margin="120,285,0,0" Name="button2" VerticalAlignment="Top" Width="203" Click="button2_Click" />

 

6. 编写后台代码:

首先程序加载时添加如下代码,这里我添加在MainPage中:

 

public static string PERIODICTASKNAME = "PeriodicTaskTest"
public PeriodicTask _tskPeriodic;
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) 

    ScheduledAction tTask = ScheduledActionService.Find(PERIODICTASKNAME); 
    if (tTask != null
    { 
        _tskPeriodic = tTask as PeriodicTask; 
    } 
}

 

接着添加几个方法来开启或关闭代理以及判断代理是否存在和获取代理信息:

 

private void StartPeriodicTask() 

    _tskPeriodic = new PeriodicTask(PERIODICTASKNAME); 
    _tskPeriodic.Description = "BgScheduledAction Sample, update tile by webserivce"
    if (IsTaskStart() == false
    { 
        ScheduledActionService.Add(_tskPeriodic); 
        ScheduledActionService.LaunchForTest(PERIODICTASKNAME, TimeSpan.FromSeconds(10)); 
    } 
}
private void StopPeriodicTask() 

    ScheduledActionService.Remove(PERIODICTASKNAME); 
}
private bool IsTaskStart() 

    if (_tskPeriodic != null && _tskPeriodic.IsScheduled) 
        return true;
    return false
}
private string GetTaskDescription() 

    if (_tskPeriodic != null && _tskPeriodic.IsScheduled) 
        return _tskPeriodic.Description;
    return string.Empty; 
}

 

最后在两个按钮的单击事件代码中加入如下内容:

 

private void button1_Click(object sender, RoutedEventArgs e) 

    StartPeriodicTask();
}
private void button2_Click(object sender, RoutedEventArgs e) 

    StopPeriodicTask(); 
}

 

至此还没有完成,切记最后一步要把代理项目的引用加入到主程序中,如果不做这部不会有任何报错,但是无法实现效果,需要注意:

image

image

这样就完成了,我们运行一下看看,首先启动程序:

image

点击Start Agent后退回到主屏并找到设置中的后台任务:

image

这里显示你的程序后台任务开启,我们也可以点击它进行关闭,过10秒钟可以看到如下提示:

image

代码成功,这段代码的内容非常简单,希望对大家有所帮助,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于UDP高性能传输协议UDT

UDP详解 一、 概述 UDT是一个高性能的基于UDP的数据传输协议&#xff0c;它是为支持高速广域网上海量数据传输而设计&#xff0c;为解决TCP的效率和公平问题&#xff0c;同时提供可靠的数据流和报文传输。 UDT是C库&#xff0c;几乎类同于BSD socket APIs。 UDT是多线程安全的…

全能终端神器MobaXterm

摘要&#xff1a;现今软件市场上有很多终端工具&#xff0c;比如&#xff1a;secureCRT、Putty等等。secureCRT其实也是一款很强大的终端工具&#xff0c;但它是收费软件&#xff0c;一般公司不允许使用。Putty&#xff0c;非常小巧&#xff0c;免费软件&#xff0c;但是不支持…

物业公司工作流应用方案

【基本需求】1、办公基本需求 企业要求办公自动化系统能适应不断变化的办公需求&#xff0c;提供解决公文处理等偏向个体的自动办公功能&#xff0c;还要求能解决单位之间、部门之间、管理人员之间信息交换与共享的需求。办公自动化系统首先要解决的就是提高信息的透明度&…

jquery ajax 异步分页,jquery 分页 Ajax异步

#th>th>nameth>操作th>tr>thead>tbody>ul>td>tr>tfoot>table>div>$(function() {init();showMenu();});//使用Ajax异步查询数据functionqueryPage(pageno) {vardataObj{"pageno": pageno,//pageno 是属性名称,是否增加双引号…

javascirpt历史澄清误解基本概念特点编程语言web2.0网页javascript - javascirpt知识大全...

目录1历史 2澄清误解 3基本概念 4特点 5与Java的不同 6开发工具 历史  大概在1992年&#xff0c;一家称作Nombas的公司开始开发一种叫做C减减&#xff08;C-minus-minus&#xff0c;简称Cmm&#xff09;的嵌入式脚本语言。这个脚本语言捆绑在一个叫做CEnvi的共享软件产品中&a…

入群问的这道C题目,还没人答对

最近好几个同学加我微信&#xff0c;让我帮忙拉他入群&#xff0c;然后我就随手问了个题目&#xff0c;如下上面回答的答案都是不正确的sizeof是 C语言的关键字&#xff0c;这个关键字是用来计算传入参数占用的内存字节数。比如#include <stdio.h> int main() {int a 1;…

纪录专款宝项目

1.sass项目配置&#xff0c;在util.js里面 2.添加的axios全局拦截 3.嵌套路由的实现&#xff0c;后台也是通过嵌套路由实现 4.多个tab切换&#xff0c;请求数据返回与当前tab不一致的问题。由于vue的实时响应&#xff0c;导致当前tabId变化&#xff0c;但是上一个请求还没有结束…

常见单元测试工具介绍

1. C/C语言开发的首选利器- CTest 以前在windows平台下的开发&#xff0c;使用的框架主要是MFC&#xff0c;以及console工程&#xff08;基于win32SDK&#xff09;&#xff0c;属于纯C/C开发的范畴。 因此&#xff0c;使用的单元测试工具&#xff0c;主要有CTest和CppUni…

win10系统的服务器在哪里设置密码,window10怎么设置密码

window10怎么设置密码Windows 10 系统中可以用自己喜欢的图片结合手势来设置登陆密码&#xff0c;很酷很有个性&#xff0c;如何操作呢&#xff1f;1、从开始菜单中打开“设置”应用(也可以通过其他的方式打开“设置”应用&#xff1b;从通知中心打开&#xff1b;从搜索框中搜索…

ubuntu安装配置方法【转】

文章转自&#xff1a;http://www.ygblog.com/user1/31744/archives/2007/153036.html3、apt-get之傻瓜式软件更新方式。在其他的linux发行版上安装额外的软件是件伤脑筋的事&#xff0c;在ubuntu上面安装软件简直是种享受&#xff0c;只要配置一下/etc/apt/sources.list&#x…

Linux 启动优化实战-2.41 秒启动应用!

系统启动是一个大问题&#xff0c;前段时间有同学也问了我这个问题&#xff0c;不仅仅是Linux&#xff0c;Android 下面的启动优化也可以借助bootchar来分析。下面正文是老吴的实操过程。哦&#xff0c;对了&#xff0c;上篇文章有同学问文章的封面&#xff0c;这里贴出来&…

bzoj 4827 [Hnoi2017]礼物——FFT

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id4827 式子就是 \sum_{i0}^{n-1}(a[ i ] - b[ ik ] c)^2 。把 b 翻成两倍后卷积即可。关于 c 的部分是一个二次函数&#xff0c;注意 c 只能是整数&#xff01; #include<iostream> #include<cstdi…

C++之虚函数是如何实现的

最近面试过程中问到了虚函数的实现&#xff0c;当时答对了一部分&#xff0c;现在做一个详细的分析&#xff1a; 1.什么是虚函数 在某基类中声明为 virtual 并在一个或多个派生类中被重新定 义的成员函数&#xff0c;用法格式为&#xff1a;virtual 函数返回类型 函数名&#x…

腾达fh307没有显示服务器名,腾达(Tenda)FH307路由器上网设置 | 192路由网

本文介绍了腾达(Tenda)FH307路由器的安装、上网设置方法&#xff0c;同时分别介绍了“ADSL(PPPOE)拨号”、“动态IP”、“静态IP”三种上网方式的区别&#xff0c;以及在腾达(Tenda)FH307路由器上的详细设置。腾达(Tenda)FH307无线路由器一台新购买的腾达FH307路由器实现上网&a…

记得重用layout

2019独角兽企业重金招聘Python工程师标准>>> 这样的布局&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android" android:layout_width"…

sql2000-2 4/19

SQL2000客戶的上次問題後來H盤自動毀掉了昨天換了顆新硬碟,當資料庫挂上之後,H一直又提示錯誤,後來還是將資料庫路徑設為I傍晚時分親眼目睹了H所有資料被自動刪除的過程,待服務器重新啟動後H無法存取萬幸的是早一步將資料庫路徑作了更動在還原資料庫的過程中用克隆的BAK還原一直…

五一加班

前几年五一放假&#xff0c;我们会去小云家&#xff0c;五一也是荔枝成熟的时候&#xff0c;有一年吃上刚从树上摘的荔枝&#xff0c;现在还能记起那种味道&#xff0c;也是那次之后&#xff0c;想奢入简很难了&#xff0c;荔枝也一定要吃新鲜的了。今年一直还没看到荔枝的影子…

win10系统能做域服务器吗,Win10 LTSC 加入 Windows Server 2019 域服务器

前面的文章已经创建了域服务器、创建了域组织单位、用户组、用户&#xff0c;下面是如何把一台 Win10 LTSC 系统的电脑加入到Windows Server 2019 域服务器&#xff1b;0x01 加域准备修改计算机名、修改IP地址DNS指向 Windows Server 2019 域控制器&#xff1b;注意&#xff1a…

多线程死锁及解决办法

死锁是由于不同线程按照不同顺序进行加锁而造成的。如&#xff1a; 线程A&#xff1a;对lock a加锁 > 对lock b加锁 > dosth > 释放lock b > 释放lock a 线程B&#xff1a;对lock b加锁 > 对lock a加锁 > dosth > 释放lock a > 释放lock b 这样两条线程…

html:web前端开发规范

基本原则* 遵循内容&#xff08;HTML&#xff09;、显示&#xff08;CSS&#xff09;、行为&#xff08;JavaScript&#xff09;分离的代码组织模式 * 代码格式化&#xff0c;保持干净整洁 HTML部分2.1. 添加必须的utf-8的字符集&#xff0c;并且使用HTML5的简洁方式&#xff1…