asp.net web 定时执行任务 定时器 Global.asax

web网站里面,需要每隔1分钟,执行一个任务,并且一直保持这个定时执行状态,可以用如下一个方法:

以下代码是 Global.asax.cs 的全部代码。

using System;
using System.Xml;

namespace Web.SSART.Site
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码  
            TimeTask.Instance().ExecuteTask += new System.Timers.ElapsedEventHandler(Global_ExecuteTask);
            TimeTask.Instance().Interval = 10000 * 10;//表示间隔
            TimeTask.Instance().Start();
        }
        void Global_ExecuteTask(object sender, System.Timers.ElapsedEventArgs e)
        {
            //在这里编写需要定时执行的逻辑代码


            XmlDocument xmldoc = new XmlDocument();
            XmlNode xmlnode = xmldoc.CreateNode(XmlNodeType.XmlDeclaration, "", "");
            xmldoc.AppendChild(xmlnode);
            XmlElement xmlelem = xmldoc.CreateElement("", "urlset", "");
            xmldoc.AppendChild(xmlelem);
            //加入另外一个元素
            for (int i = 1; i < 4; i++)
            {
                XmlNode root = xmldoc.SelectSingleNode("urlset");
                XmlElement xe1 = xmldoc.CreateElement("url" + i);
                XmlElement xesub1 = xmldoc.CreateElement("loc");
                xesub1.InnerText = "http://www.ssart.net/news/news_16702.html";
                xe1.AppendChild(xesub1);

                XmlElement xesub2 = xmldoc.CreateElement("lastmod");
                xesub2.InnerText = DateTime.Now.ToString();
                xe1.AppendChild(xesub2);

                XmlElement xesub3 = xmldoc.CreateElement("changefreq");
                xesub3.InnerText = "always";
                xe1.AppendChild(xesub3);

                XmlElement xesub4 = xmldoc.CreateElement("priority");
                xesub4.InnerText = "always";
                xe1.AppendChild(xesub4);

                XmlElement xesub5 = xmldoc.CreateElement("data");

                XmlElement xesub6 = xmldoc.CreateElement("display");

                XmlElement xesub7 = xmldoc.CreateElement("xhtml_url");
                xesub7.InnerText = "always";
                xesub6.AppendChild(xesub7);

                xesub5.AppendChild(xesub6);

                xe1.AppendChild(xesub5);


                root.AppendChild(xe1);//添加到<Employees>节点中
            }

            //保存创建好的XML文档
            xmldoc.Save("d://data.xml");
        }

        protected void Session_Start(object sender, EventArgs e)
        {

        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {

        }

        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {

        }

        protected void Application_Error(object sender, EventArgs e)
        {

        }

        protected void Session_End(object sender, EventArgs e)
        {

        }

        protected void Application_End(object sender, EventArgs e)
        {

        }



    }

    //创建一个定时器的类
    public class TimeTask
    {
        public event System.Timers.ElapsedEventHandler ExecuteTask;

        private static readonly TimeTask _task = null;
        private System.Timers.Timer _timer = null;


        //定义时间
        private int _interval = 60000;

        public int Interval { set; get; }


        static TimeTask()
        {
            _task = new TimeTask();
        }

        public static TimeTask Instance()
        {
            return _task;
        }

        //开始
        public void Start()
        {
            if (_timer == null)
            {
                _timer = new System.Timers.Timer(_interval);
                _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
                _timer.Enabled = true;
                _timer.Start();
            }
        }

        protected void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (null != ExecuteTask)
            {
                ExecuteTask(sender, e);
            }
        }

        //停止
        public void Stop()
        {
            if (_timer != null)
            {
                _timer.Stop();
                _timer.Dispose();
                _timer = null;
            }
        }

    }


}