qq_39464862 2018-10-29 01:28 采纳率: 0%
浏览 1825
已采纳

.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条回答

  • threenewbee 2018-10-29 01:47
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配