Login Gblog  
简单点~~~
 
文章全文
Goberl 发表于 2008-9-4 2:15:29

  如何让我们的asp.net程序在某个时刻自动执行某些任务呢?

  当我们为桌面程序设计某个计划任务时,一个时钟控件(Timer)就轻而易举地解决了,可我们如何让我们的web程序能具有像时钟控件一样的功能呢?(注:此处的自动执行不是某个用户访问某一页面时才自动执行,而是只要Web服务器正常工作,则无论有没有用户访问都可自动执行某些任务的情况)

  吾漫游于搜索引擎间,终得甜头啊~~~

   其思路如下:

    在Application_Start里面添加一进程,通过while(true)让它陷入执行任务的“死”循环,此死循环非绝对死循环——每当它执行一次任务后,我们就让它沉睡一会,Thread.Sleep(3000)。由此,每隔3秒就可执行一次我们安排的任务,至于任务和执行时间个间隔完全可以“自治”。

   Global.asax文件部分源码:

复制代码

复制代码

   private void start()


    {//调用进程


        ThreadStart myThreadStart = new ThreadStart(startJob);


        schedulerThread = new Thread(myThreadStart);


        schedulerThread.Start();


    }


    private void startJob()


    {//循环执行,间隔3秒


        while (true)


        {//每隔3秒执行一次


            ThreadStart myThreadDelegate = new ThreadStart(excuteJob);


            Thread myThread = new Thread(myThreadDelegate);


            myThread.Start();


            Thread.Sleep(3000);


        }


    }


    private void excuteJob()


    {


        //此处添加需要执行的任务,如备份数据库、发送信息等待  



        //此处的任务是每隔3秒刷新一次www.goberl.com本站的页面


        //==================================================任务开始


        WebRequest wres;


        String url = "http://www.goberl.com/";


        wres = WebRequest.Create(url);


        WebResponse wreq = wres.GetResponse();


        Encoding code = Encoding.GetEncoding("gb2312");


        StreamReader sr1 = new StreamReader(wreq.GetResponseStream(), code);


        String strtemp = sr1.ReadToEnd();


        sr1.Close();


        //==================================================任务结束


        //记录执行的次数


        int readCount=-2;


        using (StreamReader sr = new StreamReader(System.AppDomain.CurrentDomain.BaseDirectory+@"/countRecord.txt"))


        {//获取文本文件中的数字


            String line;


            while (((line = sr.ReadLine()) != null))


            {


                readCount = Convert.ToInt32(line);


            }



        }


        if (readCount != -2)


        {//如果成功读取了文本文件中的数据则是该数字自增1,并写入文本文件


            readCount++;


            using (StreamWriter sw = new StreamWriter(System.AppDomain.CurrentDomain.BaseDirectory + @"/countRecord.txt", false))


            {


                sw.Write(readCount.ToString());               


            }


        }    


    }


    public System.Threading.Thread schedulerThread = null;


    void Application_Start(object sender, EventArgs e) 


    {


        // 在应用程序启动时运行的代码


        HttpContext.Current.Application.Lock();


        HttpContext.Current.Application["TimeStamp"] = DateTime.Now;


        HttpContext.Current.Application.UnLock();


        start();    //调度


    }


 


  源码下载:download

类别:Programming      标签:ASP.NET      浏览(23)
相关主题:
评论列表:
发表评论
大名: ( *必填)
Email: (填写后,将收到Goberl对你的回复)
网址: (可选)
正文:
      记住信息?