qq_39464862
2018-10-29 01:28
采纳率: 45.9%
浏览 1.7k
已采纳

.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条回答 默认 最新

  • blownewbee 2018-10-29 01:47
    已采纳

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

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

    点赞 打赏 评论
  • wangzhengziyu 2018-10-29 06:00

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

    点赞 打赏 评论

相关推荐 更多相似问题