.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;
}

public  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 的时候执行某个函数(我想设置为每天00:00:00执行)
    int iHour = 00;
    int iMinute =00;
    int iSecond = 00;
    // 设置 每天的10:30:00开始执行程序
    if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
    {
        执行SQL语句
    }
}

    这是网上实现解决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();  
}

用的是阿里的虚拟空间,发现一次都没有执行,是什么原因呢?

2个回答

你的代码每天才执行1次。而这个过程中只要iis崩溃了,或者你程序崩溃了,就肯定不行了。
if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
修改为
if (intSecond == iSecond)
上面int iSecond = 00;修改为int iSecond = 0; //不要前面加上0,那样变成了八进制。

这个代码每分钟都执行,看看是否能看到效果。

qq_39464862
qq_39464862 回复caozhy: 非常感谢您提供的帮助
大约一年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_39464862: 不过能不能执行就看运气了,程序一旦崩溃就不一定了。
大约一年之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_39464862: 3个变量都是0就可以了
大约一年之前 回复
qq_39464862
qq_39464862 回复caozhy: 我刚刚看了下发现执行了,如果想设定为每天0点时执行,要怎么设置?
大约一年之前 回复
qq_39464862
qq_39464862 回复caozhy: 我刚刚看了下发现执行了,如果想设定为每天0点时执行,要怎么设置?
大约一年之前 回复
qq_39464862
qq_39464862 我刚上午试了下,还是不起作用
大约一年之前 回复

应该是IIS回收了,建议用windows service做比较好;IIS运行ASP.NET程序时,是有维护时间的,超过规定时间之后,没有客户端请求服务时,IIS会把这个ASP.NET程序暂停挂起的,这样,Timer就跟着不工作了,默认时间好像是20分钟;你要么把IIS设定调整试下

qq_39464862
qq_39464862 回复wangzhengziyu: 非常感谢您提供的帮助
大约一年之前 回复
qq_39464862
qq_39464862 回复wangzhengziyu: 如果把程序放在服务器上,是不是把IIS应用程序池回收关闭?
大约一年之前 回复
wangzhengziyu
wangzhengziyu 回复qq_39464862: 这个就不知道了。。。没用过虚拟空间,只了解过
大约一年之前 回复
qq_39464862
qq_39464862 回复wangzhengziyu: 我现在用的是阿里的虚拟空间,好像改不了应用程序池的设定
大约一年之前 回复
wangzhengziyu
wangzhengziyu 回复qq_39464862: 在IIS->应用程序池->高级设置->闲置超时(分钟) 设为0试下
大约一年之前 回复
qq_39464862
qq_39464862 能给个具体的方法吗?谢谢了!!!
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问