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

简介: 前段时间做过一个天气应用,一直是只支持前台获取数据,上周末参加了Windows Phone的CodeJam和高手们交流了一下,发现实现后台定时更新功能也不是很难,于是在网上找一些资料,在找资料的过程中发现,网上的一些文章和代码把这个本来很简单代码能实现的功能描述的很复杂,结合了很多无关功能,这就让刚接触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

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

目录
相关文章
|
3天前
|
人工智能 测试技术 Windows
Windows 竞技场:面向下一代AI Agent的测试集
【10月更文挑战第25天】随着人工智能的发展,大型语言模型(LLMs)在多模态任务中展现出巨大潜力。为解决传统基准测试的局限性,研究人员提出了Windows Agent Arena,一个在真实Windows操作系统中评估AI代理性能的通用环境。该环境包含150多个多样化任务,支持快速并行化评估。研究团队还推出了多模态代理Navi,在Windows领域测试中成功率达到19.5%。尽管存在局限性,Windows Agent Arena仍为AI代理的评估和研究提供了新机遇。
17 3
|
5天前
|
存储 Serverless API
基于百炼平台构建智能体应用——十分钟构造能主动提问的导购智能体
本文介绍了如何使用阿里云百炼大模型服务平台构建一个多智能体的智能导购应用,并将其部署到钉钉。通过百炼的Assistant API,您可以快速构建一个包含规划助理、手机导购、冰箱导购和电视导购的智能导购系统。文章详细讲解了从创建函数计算应用、访问网站、验证智能导购效果到将商品检索应用集成到智能导购中的全过程,帮助您快速实现智能导购功能。
21 0
基于百炼平台构建智能体应用——十分钟构造能主动提问的导购智能体
|
22天前
|
人工智能 搜索推荐 算法
AI Agent应用出路到底在哪?
【10月更文挑战第6天】
37 0
AI Agent应用出路到底在哪?
|
26天前
|
人工智能
Agent应用对话情感优化
【10月更文挑战第2天】
24 0
Agent应用对话情感优化
|
27天前
|
人工智能 API Python
|
11天前
|
传感器 人工智能 机器人
Multi-Agent应用领域及项目示例
多智能体系统(MAS)通过多个自主、交互式的智能体协同工作,能够更高效地解决复杂问题,提高系统的灵活性和鲁棒性。本文详细介绍了MAS的概念、特点及其在人工智能与机器人技术、经济与商业、交通管理、医疗健康和环境保护等领域的具体应用示例。
34 0
|
16天前
|
XML 缓存 前端开发
Electron-builder 是如何打包 Windows 应用的?
本文首发于微信公众号“前端徐徐”,作者徐徐深入解析了 electron-builder 在 Windows 平台上的打包流程。文章详细介绍了 `winPackager.ts`、`AppxTarget.ts`、`MsiTarget.ts` 和 `NsisTarget.ts` 等核心文件,涵盖了目标创建、图标处理、代码签名、资源编辑、应用签名、性能优化等内容,并分别讲解了 AppX/MSIX、MSI 和 NSIS 安装程序的生成过程。通过这些内容,读者可以更好地理解和使用 electron-builder 进行 Windows 应用的打包和发布。
65 0
|
2月前
|
JavaScript 前端开发 API
MASM32编程通过WMI获取Windows计划任务
MASM32编程通过WMI获取Windows计划任务
|
27天前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
30 0
|
2月前
|
调度 Windows Python
windows计划任务的“等待空闲时间”已弃用
【9月更文挑战第1天】在Windows中,若“等待空闲时间”功能被弃用,可采用第三方任务调度软件(如Task Scheduler Pro、Advanced Task Scheduler)替代,或使用Python库(如schedule)和PowerShell脚本来实现。此外,还可调整任务触发条件,如设置特定时间或事件触发,以达到类似效果。这些方法能有效实现任务的精准调度。