应用场景
公司旧项目需修改原有的数据备份功能,原功能为在实时数据入库后进行数据备份,备份方法为将实时数据转化为二进制数组后按照当天日期进行入库,之后每次有实时数据入库都需要将历史数据表中的二进制数据字段查询后在尾部添加新二进制数据,再更新入库。然而这个系统为数据监控系统,每秒都会有将近百条记录入库,所以上述原功能会导致运行迟缓,消耗资源。
现改为每日零时进行一次性的数据备份。
定时任务可以有两种方式实现:
- 第一种是使用定时间隔为一秒的计时器System.Timers.Timer,一直循环判断当前时间是否为期望执行时间;
- 第二种是使用计时器System.Threading.Timer,当前时间为期望执行时间时触发定时任务。
一、System.Timers.Timer
定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。
实例:
//定义Timer类
System.Timers.Timer timer;
private void FormMain_Load(object sender, EventArgs e)
{
InitTimer();
}
/// <summary>
/// 初始化Timer控件
/// </summary>
private void InitTimer()
{
//设置定时间隔(毫秒为单位)
int interval = 1000;
timer = new System.Timers.Timer<