C#定时执行
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common.Utils; namespace test
{
public partial class Form1 : Form
{
/// <summary>
/// 记录上次执行时间的文件路径
/// </summary>
private string lastRunTimePath = Path.Combine(Application.StartupPath, "lastRunTime.txt");
/// <summary>
/// 上次执行时间,精确到秒
/// </summary>
private string lastRunTime
{
get
{
if (File.Exists(lastRunTimePath))
{
using (StreamReader sr = new StreamReader(lastRunTimePath))
{
string result = sr.ReadToEnd();
sr.Close();
return result;
}
}
return null;
}
set
{
if (!File.Exists(lastRunTimePath))
{
File.Create(lastRunTimePath);
}
using (StreamWriter sw = new StreamWriter(lastRunTimePath, false))
{
sw.Write(value);
sw.Close();
}
}
} public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = ; //定时执行的时间精确到秒,那么Timer的时间间隔要小于1秒
timer.Tick += new EventHandler((a, b) =>
{
DateTime now = DateTime.Now;
if (now.ToString("yyyy-MM-dd HH:mm:ss") != lastRunTime) //如果相等则说明已经执行过了
{
lastRunTime = now.ToString("yyyy-MM-dd HH:mm:ss");
LogUtil.Log(now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " 时间已到,执行任务"); //TODO:在这里执行任务
}
});
timer.Start();
} }
}
说明:
1、为什么要将lastRunTime存到文件中?
这是为了程序重起的时候,仍能正确判断时间,不会重复执行。
2、和使用Windows定时任务的方式实现有什么区别?
这也是这种实现方式的缺点,精度不够高,如果定时执行定时到分钟,一般精度也只到分钟,可以应用于对于定时时间精确程度不高的定时任务。虽然减小Interval可以提高定时精度,但耗费CPU资源。
3、为什么要这样实现,直接判断时分秒不就行了吗?
程序运行需要时间,哪怕这个时间非常短,会导致跳过某个时间,例如Interval设置为1000,也就是1秒,13时50分29.999秒执行了一次,下一次判断的时候到了13时50分31.001秒,跳过了13时50分30秒,如果秒数用等于判断,就不会执行了。
4、这只是个测试程序,实际使用需要根据实际情况改造一下,比如定时到分钟就可以了,从配置文件中读取配置的定时时间,然后按程序中的方法判断有没有到这个时间。
测试日志截图:
C#定时执行的更多相关文章
- MVC 定时执行任务
环境:.net4.5 需求:需要一个方法定时执行任务 解决: System.Threading.Timer 提供以指定的时间间隔执行方法的机制. 此类不能被继承,有10多种实例化方法,满足多种情况. ...
- 【转】linux 定时执行shell脚本
在oracle 中可以利用dbms_job包定时执行pl/sql.sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成 本文讲述crontab具体用法,以供备忘. 在oracle ...
- Linux下定时执行脚本(转自Decode360)
文章来自:http://www.blogjava.net/decode360/archive/2009/09/18/287743.html Decode360's Blog 老师(业精于勤而荒于嬉 ...
- [转]oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; selec ...
- linux定时执行任务crontab命令用法
linux系统的定时任务是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外, 由于使用者自己也可以设置计划任务,所 ...
- ORACLE 定时执行存储过程
推荐用dbms_scheduler方式更好 (2012-11-19注) /* 查询: select job,broken,what,interval,t.* from user_jobs t; job ...
- oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
来源于:http://www.cnblogs.com/wangfg/p/5110831.html 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; s ...
- linux下定时执行任务方法【转】
之前就转过一篇关于定时任务的文章,前俩天用,还的翻出来看!!!再转一次,备用,,需要的时候不用麻烦找! ----------------------------------------------- ...
- linux定时执行任务
(1)Linux下如何定时执行php脚本?(2)Linux下如何设置定时任务?(3)Crontab定时执行程序 核心提示:键入 crontab -e 编辑crontab服务文件 分为两种情况:(还有一 ...
随机推荐
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- C#中如何给Excel添加水印
我们知道Microsoft Excel并没有内置的功能直接给Excel表添加水印,但是其实我们可以用其他变通的方式来解决此问题,如通过添加页眉图片或艺术字的方法来模仿水印的外观.所以在这篇文章中,我将 ...
- Kooboo CMS技术文档之三:切换数据存储方式
切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...
- Android Studio切换为eclipse的快捷键之后还是有区别的部分快捷键
Android Studio Eclipse 把代码提示换成了Class Name Completion, 快捷键是Ctrl+Alt+Space(空格键). 代码提示快捷键Alt+/, ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- svn常用命令
1.新建版本库 [root@localhost repos]# mkdir -p project [root@localhost repos]# svnadmin create project [ro ...
- CentOS7 + mono +Jexus 环境的搭建
CentOS7的安装和配置 1,从http://www.centos.org/下载CentOS7的镜像,并在VMWare中创建该镜像的虚拟机,为方便操作,把虚拟机的网络连接设置为桥接模式:在安装过程中 ...
- 【Java并发编程实战】-----“J.U.C”:CyclicBarrier
在上篇博客([Java并发编程实战]-----"J.U.C":Semaphore)中,LZ介绍了Semaphore,下面LZ介绍CyclicBarrier.在JDK API中是这么 ...
- ASP.NET MVC Model绑定(六)
ASP.NET MVC Model绑定(六) 前言 前面的篇幅对于IValueProvider的使用做个基础的示例讲解,但是没并没有对 IValueProvider类型的实现做详细的介绍,然而MVC框 ...
- Entity Framework 6 Recipes 2nd Edition(11-12)译 -> 定义内置函数
11-12. 定义内置函数 问题 想要定义一个在eSQL 和LINQ 查询里使用的内置函数. 解决方案 我们要在数据库中使用IsNull 函数,但是EF没有为eSQL 或LINQ发布这个函数. 假设我 ...