zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/grj001/p/12223763.html
Copyright © 2011-2022 走看看