博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Windows Phone] 为应用添加后台计划任务 – Scheduled Task Agent
阅读量:4320 次
发布时间:2019-06-06

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

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

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

1. 创建Windows Phone Silverlight Application项目:

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

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

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秒弹出如下提示:

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

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

 

<
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(); 
}

 

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

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

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

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

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

转载于:https://www.cnblogs.com/WilsonWu/archive/2011/12/27/2303340.html

你可能感兴趣的文章
Kendo MVVM 数据绑定(七) Invisible/Visible
查看>>
插入返回ibatis 的selectKey 实现插入数据后获得id
查看>>
解决win7下打开Excel2007,报“向程序发送命令时出现问题”的错误
查看>>
Win form碎知识点
查看>>
避免使用不必要的浮动
查看>>
第一节:ASP.NET开发环境配置
查看>>
sqlserver database常用命令
查看>>
rsync远程同步的基本配置与使用
查看>>
第二天作业
查看>>
访问属性和访问实例变量的区别
查看>>
Spring MVC 异常处理 - SimpleMappingExceptionResolver
查看>>
props 父组件给子组件传递参数
查看>>
【loj6038】「雅礼集训 2017 Day5」远行 树的直径+并查集+LCT
查看>>
十二种获取Spring的上下文环境ApplicationContext的方法
查看>>
UVA 11346 Probability 概率 (连续概率)
查看>>
linux uniq 命令
查看>>
Openssl rand命令
查看>>
HDU2825 Wireless Password 【AC自动机】【状压DP】
查看>>
BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】
查看>>
HUT-XXXX Strange display 容斥定理,线性规划
查看>>