请选择 进入手机版 | 继续访问电脑版

技术_方法_掌握技术,成就未来-6miu百度云

 找回密码
 立即注册
查看: 6|回复: 0

asp.net 定点(定时)执行代码

[复制链接]

277万

主题

277万

帖子

832万

积分

论坛元老

Rank: 8Rank: 8

积分
8326212
发表于 2021-1-4 13:17:32 | 显示全部楼层 |阅读模式
经过半天的研究终于搞定了,和大家分享一下。

首先纠正一下自己对Application_Start的认识:

当网站第一次或新的一次运行时Application_Start中的代码才有可能执行,执行的条件是有人访问网站。没人点击网站任何页面,Application_Start中的代码是不会执行的。上午我在Application_Start中写了代码,写入日志。重启服务器后马上就去看 log日志,发现没写入,很郁闷,后来发现很愚蠢,只有我再次点击了网站,日志才会写入。

先写一个类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Timers;
///
///Time_Task 的摘要说明
///
public class Time_Task
{
    public event System.Timers.ElapsedEventHandler ExecuteTask;
    private static readonly Time_Task _task = null;
    private System.Timers.Timer _timer = null;
    private int _interval = 1000;
    public int Interval
    {
        set
        {
            _interval=Interval;
        }
        get
        {
            return _interval;
        }
    }
    static Time_Task()
    {
        _task = new Time_Task();
    }
    public static Time_Task Instance()
    {
        return _task;
    }
    public void Start()
    {
        if (_timer == null)
        {
            _timer = new System.Timers.Timer(_interval);
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
            // 设置引发时间的时间间隔 此处设置为1秒   
            _timer.Enabled = true;
            _timer.Start();
        }
    }
    protected void _timer_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;
        // 定制时间,在14:54分 的时候执行   
        int iHour = 14;
        int iMinute = 54;
        int iSecond = 00;
        if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
        {
            if (null != ExecuteTask)
            {
                ExecuteTask(sender, e);
            }
        }
    }
    public void Stop()
    {
        if (_timer != null)
        {
            _timer.Stop();
            _timer.Dispose();
            _timer = null;
        }
    }
}


然后在gobal.asax中写如代码:

void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
         Time_Task.Instance().ExecuteTask += new System.Timers.ElapsedEventHandler(Global_ExecuteTask);
        
        Time_Task.Instance().Start();
    }
    void Global_ExecuteTask(object sender, System.Timers.ElapsedEventArgs e)
    {
        //在这里编写需要定时执行的逻辑代码,此处为写入日志
        WriteLog wl = new WriteLog();
        wl.WriteLine("fsaf");
    }

大功告成!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|技术_方法_掌握技术,成就未来-6miu百度云

GMT+8, 2021-1-17 14:39 , Processed in 0.056336 second(s), 19 queries .

合作伙伴:

盘搜搜 / 百度云搜索 / 盘多多 / 如风搜 / 小说阅读网 / 笔趣阁 / 文库 / 学术 / 小说排行榜 / 专利网 / 专利查询 / 网盘搜索 / 网盘 / 问医生 / 健康网 / APP开发 / 金蝶 / 软件定制 / 软件开发 / 教育app / ERP系统 / SAP / 分销系统 / 成都软件开发 / 小程序开发 / ERP / WMS / MES / LIMS / SCADA / PLM / PDM / 希沃 / SEEWO / OTO / O2O / 培训系统 / 在线问诊 / 在线问诊系统 / 医疗咨询系统 / 网店代运营 / 返利网 / 京东代运营 / 斯特封 / trelleborg / NOK / 斯凯孚 / SKF / 圣戈班 / Saint-Gobain / 派克汉尼汾 / parker / 洪格尔 / hunger / Merkel / 密封圈 /
快速回复 返回顶部 返回列表