C#-asp.net 每天的某時刻定時執行任務


asp.net 每天的某時刻定時執行任務

1、在Global.asax文件中 的 Application_Start 中定義一個線程

void Application_Start(object sender, EventArgs e){
        // 在應用程序啟動時運行的代碼//定義一個線程
        System.Threading.Thread LoadServiceData = new System.Threading.Thread(new System.Threading.ThreadStart(LoadFromWebservice));
        LoadServiceData.Start();
}

2、線程中調用的方法

private void LoadFromWebservice(){
        //定義一個定時器,並開啟和配置相關屬性
        System.Timers.Timer Wtimer = new System.Timers.Timer(1000);//執行任務的周期
        Wtimer.Elapsed += new System.Timers.ElapsedEventHandler(Wtimer_Elapsed);
        Wtimer.Enabled = true;
        Wtimer.AutoReset = true;
}

3、定時器Handler函數,其中寫業務代碼

 void Wtimer_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;
        // 定制時間; 比如 在10:30 :00 的時候執行某個函數
        int iHour = 10;
        int iMinute =30;
        int iSecond = 00;
        // 設置 每天的10:30:00開始執行程序
        if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
        {
            BLL.GetWebServiceData getdata = new GetWebServiceData();
            getdata.AddSolid("2014-02-01");
        }
}

4、只要在使用 Timer,就必須保留對它的引用。對於任何托管對象,如果沒有對 Timer 的引用,計時器會被垃圾回收。
即使 Timer 仍處在活動狀態,也會被回收。下面的代碼是關鍵,可解決IIS應用程序池自動回收的問題

    void Application_End( object sender, EventArgs e ) {
            System.Threading.Thread.Sleep( 1000 );
            string RequestURL = "http://www.test.com/default.aspx";
            //這里設置你的web地址,可以隨便指向你的任意一個aspx頁面甚至不存在的頁面,目的是要激發        Application_Start            
            System.Net.HttpWebRequest __HttpWebRequest = ( System.Net.HttpWebRequest ) System.Net.WebRequest.Create( RequestURL );
            System.Net.HttpWebResponse __HttpWebResponse = ( System.Net.HttpWebResponse ) __HttpWebRequest.GetResponse();
            System.IO.Stream __rStream = __HttpWebResponse.GetResponseStream();//得到回寫的字節流  
                                                                               //當不再需要計時器時,請使用 Dispose 方法釋放計時器持有的資源。
            __rStream.Close();
            __rStream.Dispose();
        }

參考:

http://blog.sina.com.cn/s/blog_69e8baad0100x8zl

http://blog.sina.com.cn/s/blog_4f52c70d0100oywo.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM