定点执行代码

经过半天的研究终于搞定了,和大家分享一下。

首先纠正一下自己对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");
    }

大功告成!!!

posted @ 2010-12-06 16:32  Sue_娜  阅读(297)  评论(0编辑  收藏  举报