定点执行代码
经过半天的研究终于搞定了,和大家分享一下。
首先纠正一下自己对Application_Start的认识:
当网站第一次或新的一次运行时Application_Start中的代码才有可能执行,执行的条件是有人访问网站。没人点击网站任何页面,Application_Start中的代码是不会执行的。上午我在Application_Start中写了代码,写入日志。重启服务器后马上就去看 log日志,发现没写入,很郁闷,后来发现很愚蠢,只有我再次点击了网站,日志才会写入。
先写一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Timers;
/// <summary>
///Time_Task 的摘要说明
/// </summary>
public class Time_Task
{
public event System.Timers.ElapsedEventHandler ExecuteTask;
private static readonly Time_Task _task = null;
private System.Timers.Timer _timer = null;
private int _interval = 1000;
public int Interval
{
set
{
_interval=Interval;
}
get
{
return _interval;
}
}
static Time_Task()
{
_task = new Time_Task();
}
public static Time_Task Instance()
{
return _task;
}
public void Start()
{
if (_timer == null)
{
_timer = new System.Timers.Timer(_interval);
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
// 设置引发时间的时间间隔 此处设置为1秒
_timer.Enabled = true;
_timer.Start();
}
}
protected void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// 得到 hour minute second 如果等于某个值就开始执行
int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
// 定制时间,在14:54分 的时候执行
int iHour = 14;
int iMinute = 54;
int iSecond = 00;
if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
{
if (null != ExecuteTask)
{
ExecuteTask(sender, e);
}
}
}
public void Stop()
{
if (_timer != null)
{
_timer.Stop();
_timer.Dispose();
_timer = null;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Timers;
/// <summary>
///Time_Task 的摘要说明
/// </summary>
public class Time_Task
{
public event System.Timers.ElapsedEventHandler ExecuteTask;
private static readonly Time_Task _task = null;
private System.Timers.Timer _timer = null;
private int _interval = 1000;
public int Interval
{
set
{
_interval=Interval;
}
get
{
return _interval;
}
}
static Time_Task()
{
_task = new Time_Task();
}
public static Time_Task Instance()
{
return _task;
}
public void Start()
{
if (_timer == null)
{
_timer = new System.Timers.Timer(_interval);
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
// 设置引发时间的时间间隔 此处设置为1秒
_timer.Enabled = true;
_timer.Start();
}
}
protected void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// 得到 hour minute second 如果等于某个值就开始执行
int intHour = e.SignalTime.Hour;
int intMinute = e.SignalTime.Minute;
int intSecond = e.SignalTime.Second;
// 定制时间,在14:54分 的时候执行
int iHour = 14;
int iMinute = 54;
int iSecond = 00;
if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
{
if (null != ExecuteTask)
{
ExecuteTask(sender, e);
}
}
}
public void Stop()
{
if (_timer != null)
{
_timer.Stop();
_timer.Dispose();
_timer = null;
}
}
}
然后在gobal.asax中写如代码:
view plaincopy to clipboardprint?
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
Time_Task.Instance().ExecuteTask += new System.Timers.ElapsedEventHandler(Global_ExecuteTask);
Time_Task.Instance().Start();
}
void Global_ExecuteTask(object sender, System.Timers.ElapsedEventArgs e)
{
//在这里编写需要定时执行的逻辑代码,此处为写入日志
WriteLog wl = new WriteLog();
wl.WriteLine("fsaf");
}
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
Time_Task.Instance().ExecuteTask += new System.Timers.ElapsedEventHandler(Global_ExecuteTask);
Time_Task.Instance().Start();
}
void Global_ExecuteTask(object sender, System.Timers.ElapsedEventArgs e)
{
//在这里编写需要定时执行的逻辑代码,此处为写入日志
WriteLog wl = new WriteLog();
wl.WriteLine("fsaf");
}
大功告成!!!