[CF Skills]如何在预定的时间运行你的程序
如何在预定的时间运行应用程序呢?就比如一个自定义的闹钟程序。如何在.NET Compact Framework中实现这样一个功能,好的,先来看看从MSDN上可以查到的这样一个函数:
BOOL CeRunAppAtTime(
TCHAR* pwszAppName,
SYSTEMTIME* lpTime
}
值得注意的是第二个参数是SystemTime的结构。这在.NET Compact Framwork中转化过来并不是一件直接的事。
publicstaticvoid RunAppAtTime(string s, DateTime dt)
{
//首先将DateTime转化成Windows FileTime(UTC)
long fileStartTime = dt.ToFileTime();
long localFileStartTime = 0;
//然后将UTC file time转成本地file time
FileTimeToLocalFileTime(ref fileStartTime, ref localFileStartTime);
SystemTime systemStartTime = newSystemTime();
//再将本地file time 转化成systemtime结构
FileTimeToSystemTime(ref localFileStartTime, systemStartTime);
CeRunAppAtTime(s, systemStartTime);
}
#region invoke methods
[DllImport("CoreDLL.dll")]
publicstaticexternint CeRunAppAtTime(string application,
SystemTime startTime);
[DllImport("CoreDLL.dll")]
publicstaticexternint FileTimeToSystemTime(reflong lpFileTime,
SystemTime lpSystemTime);
[DllImport("CoreDLL.dll")]
publicstaticexternint FileTimeToLocalFileTime(reflong lpFileTime,
reflong lpLocalFileTime);
#endregion
这样的程序是可以运行的,我们可以用如下的代码测试一下:
DateTime startTime = DateTime.Now + newTimeSpan(0, 1, 0);
string s = @""Windows"BubbleBreaker.exe";
Winbile.AtTime.RunAppAtTime(s,startTime);
可以看到在一分钟以后BubbleBreaker运行起来了,这似乎不错。但是对于长时间间隔的appCall这就行不通了,在大多数机器下,CeRunAppAtTime并不能在长时间间隔下工作(例如机器已经Suspend),那么怎么让程序无论是挂起还是lowpower下都一直运行呢?这时候,可以参考SDF2.1里面提供的一个叫做LargeIntervalTimer的东东,故名思意就是大时间间隔的计时器。用法很简单,指定几个属性就OK了:
public static void RunAtLargeInterval(EventHandler myhandler)
{
OpenNETCF.WindowsCE.LargeIntervalTimer m_lit = new OpenNETCF.WindowsCE.LargeIntervalTimer();
// 这里设为从今后 1天开始
m_lit.FirstEventTime = DateTime.Now.AddDays(1);
// 之后7天一次
m_lit.Interval = new TimeSpan(7, 0, 0, 0);
// 反复
m_lit.OneShot = false;
// 挂上一个事件处理器
m_lit.Tick += myhandler;
// 启动
m_lit.Enabled = true;
}
这样不论是你的自定义的日程表,还是你的GPS纪录器或者其他此类必须长期运行在时间轴上的应用程序就可以顺畅的一直运行了,不必担心机器挂起,也没有任何冗余的代码。你只需要写好自己的EventHandler
完整的代码示例在这里:http://www.winbile.net/bbs/forums/threads/1034915.aspx
[CF Skills]如何在预定的时间运行你的程序相关推荐
- 时间预定java,在预定的时间运行任务java,apache
你可以使用 Quartz api这个pourpose. Quartz调度API易于使用,并进行调度初始化. 您可以使用具有毫秒的简单触发器并重复作业并设置重复间隔. Advance Trigger C ...
- 计算机关机时间设置方法,如何设置计算机的预定关机时间,教您如何设置计算机的预定关机时间...
如何设置计算机的预定关机时间?计划关闭功能由文件夹中的Shutdown.exe程序控制,然后我们可以向他添加一系列命令以实现计划关闭. 有时在哪里设置定时关机,您下载了一个东西,但是您必须关闭计算机并 ...
- [CF.Skills]托管代码在Smartphone上创建快捷方式
[CF.Skills]托管代码在SmartPhone上创建快捷方式 摘要 以前我们经常是同步后在PC机上Copy程序并选择"粘贴快捷方式",在Smartphone上添加快捷菜单 ...
- java计算程序运行时间_C#里面的时间,如何计算一个程序运行花费的时间
有时候我们需要知道我们的程序性能怎么样, 运行的快不快 就像我们跑步一样,我们看谁跑的快. 在起跑线的时候,发令枪一响,我们按下开始 等过了终点线,我们按下结束 这中间的时间间隔,就是我们奔跑的时间. ...
- [CF.Skills]播放嵌入资源的声音文件
[CF.Skills]播放嵌入资源的声音文件 摘要:本文阐述了在Windows Mobile中如何播放潜入资源的声音文件KeywordsPlaySound, Windows Mobile, Embed ...
- crontab用法 时间配置_Linux指定的时间运行自定义命令的两种方式
如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...
- 8 时间转指定时区的时间_Linux指定的时间运行自定义命令的两种方式
如何在Linux中在指定的时间运行自定义命令 不知道大家有没有这样类似的经历,使用诸如rsync将一个大文件传输到局域网的另一个系统. 由于文件比较大,耗费的时间可能达到小时级别.这时我们可能就会想能 ...
- java jps都卡死,java长时间运行后,jps失效
在部署完应用后,原本jps使用的好好的,能正确的查询到自己正在运行的java程序. 但,过了一段时间后,再使用jps来查看运行的应用时,自己运行的程序都看不到,但是自己也没有关闭这些程序啊!然而使用 ...
- game module 停止运行_恒温摇床长时间运行的注意事项
2020年10月30日 11:47 来源: 杭州川一实验仪器有限公司 >>进入该公司展台 产品简介 恒温摇床具有不锈钢万用夹具.数显控温.无级调速和良好的热循环功能,是一种多用途 ...
最新文章
- python两个集合的交集 合集 差集
- Uber开源TensorFlow框架工具箱Ludwig,无需编码即可进行深度学习开发
- 最近又Get个新技能,不是全栈也能用技术倒腾点东西赚零花钱了!
- Java Review - 并发编程_ 回环屏障CyclicBarrier原理源码剖析
- php中的关联数组,PHP中的多种关联数组
- 重磅 | 神策数据微信生态数字化运营解决方案上线!
- windows下看端口占用
- C++ 多态的两种形式
- vmware windows linux udp通信,windows 下 udp socket
- Uva 1630 折叠串
- 朗文3000词汇表带音标_牛津3000词汇表
- make menuconfig快速查找
- C++关键字分析系列
- js下拉列表二级联动
- JavaScript词汇表
- linux删除pdf密码
- KALI中Arping的使用方法(2023)
- 【spine】制作游戏中人物动作(战斗、倒地、移动等操作等)动画的一个完整流程
- Uncaught TypeError: Cannot read property 'opera' of undefined
- 随机信号分析笔记03:全概率公式和贝叶斯公式
热门文章
- Selenium学习之==Switch与SelectApi接口详解
- 关于es6的一些文章
- Java泛型的PECS原则
- React组件生命周期-正确执行运行阶段的函数
- 软考一般知识之数据库
- ArcGIS API For Silverlight使用在线地图的多种方法总结
- error: [FabricCAClientService.js]: Failed to enroll admin, error:%o message=Calling enroll endpoint
- 从高中生活步入大学生活
- 04. 二维数组中的查找
- rs.getDate 返回类型问题