C# 使用Timer設置一個定時任務

好久沒更新博客了,這次記錄一個最近寫的定時任務,使用的是.NET4.0自帶的一個System.Timers執行定時任務,話不多說,先上代碼。

1、在Global.asax文件的Application_Start方法裏面加入如下代碼:

            //定義定時器
            //1000表示1秒的意思
            System.Timers.Timer myTimer = new System.Timers.Timer(1000 * 60 * 10);
            //TaskAction.SetContent 表示要調用的方法
            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(TaskAction.SetContent);
            myTimer.Enabled = true;
            myTimer.AutoReset = true;

2、自定義TaskAction類用於處理需要定時執行的任務:

public static class TaskAction
    {
        /// <summary>
        /// 定時器委託任務 調用的方法
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        public static void SetContent(object source, ElapsedEventArgs e)
        {
            //DateTime now = DateTime.Now;
            //if (now.Hour == 12 || now.Hour == 18 || now.Hour == 23)
            //{
                //這裏寫你定時執行的代碼
                new LEOController().adddata();
            //}
        }
        /// <summary>
        /// 應用池回收的時候調用的方法
        /// </summary>
        public static void SetContent()
        {
        }
    }

3、在Global.asax文件裏添加Session_End方法,用於Session失效時執行

protected void Session_End(object sender, EventArgs e)
        {
            //下面的代碼是關鍵,可解決IIS應用程序池自動回收的問題
            System.Threading.Thread.Sleep(1000);
            //觸發事件, 寫入提示信息
            TaskAction.SetContent();
            //這裏設置你的web地址,可以隨便指向你的任意一個aspx頁面甚至不存在的頁面,目的是要激發Application_Start
            //使用您自己的URL
            string url = "http://127.0.0.1:8080";
            System.Net.HttpWebRequest myHttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
            System.Net.HttpWebResponse myHttpWebResponse = (System.Net.HttpWebResponse)myHttpWebRequest.GetResponse();
            System.IO.Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回寫的字節流

            // 在會話結束時運行的代碼。
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式設置爲 InProc 時,纔會引發 Session_End 事件。
            // 如果會話模式設置爲 StateServer
            // 或 SQLServer,則不會引發該事件。
        }

 4、在web.config中配置sessionState,設置session的模式和過期時間

<sessionState mode="InProc" 
                  cookieless="false"
                  timeout="30"/>

mode="InProc"表示當前服務器下的session,timeout="30"表示過期時間爲半小時,這裏的設置很關鍵,由於之前沒有配置session,如果站點長時間沒有被訪問,導致session過期後程序池自動回收就不在執行定時任務,所以前面執行Session_End方法時,重新訪問了一下站點服務器,目的是要激發Application_Start,從而激發定時任務。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章