定时器不能正常工作

本文关键字:工作 常工作 不能 定时器 | 更新日期: 2023-09-27 18:17:16

定时器只工作一次。这个服务必须每两分钟工作一次…公共分部类Service1: ServiceBase{RuleContext entity = new RuleContext();Private int id;private Timer _timer;private DateTime _laststrn = DateTime. now . adddays (-1);

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        OnTimer();
    }
    public void OnTimer()
    {
        Timeout.Infinite);
        _timer = new Timer();
        _timer.Interval = 2 * 60 * 1000;
        _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        _timer.Enabled = true;
        _timer.AutoReset = true;
        _timer.Start();
    }

    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        // ignore the time, just compare the date
        if (_lastRun.Date <= DateTime.Now.Date)
        {

            GetRule();


        }
    }

    protected override void OnStop()
    {
    }
    public void GetRule()
    {

        var query = from ruleset in entity.RuleSets
                    join rule in entity.Rules on ruleset.Id equals rule.RuleSetId
                    join schedulerule in entity.Schedules on rule.ScheduleId equals schedulerule.Id
                    select new
                    {
                        Id = ruleset.Id,
                        daily = schedulerule.Daily,
                        mountly = schedulerule.Monthly,
                        dayofMounth = schedulerule.DayOfMonth,
                    };

        foreach (var q in query.ToList())
        {
            if (q.mountly && q.daily)
            {
                if (q.dayofMounth == (int)DateTime.Now.Day)
                {
                    UpdateValue(q.Id);
                }
            }
            else if (q.daily)
            {
                UpdateValue(q.Id);
            }
            else if (q.mountly)
            {
                if (q.dayofMounth == (int)DateTime.Now.Day)
                {
                    UpdateValue(q.Id);
                }
            }
        }
    }

    public void UpdateValue(int id)
    {
        var ruleSet = entity.RuleSets.First(k => k.Id == id);
        ruleSet.RcvByte = 0;
        ruleSet.SentByte = 0;
        entity.SaveChanges();
    }
}

定时器不能正常工作

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e){

    // ignore the time, just compare the date
    if (_lastRun.Date <= DateTime.Now.Date)
    {
        GetRule();
   }
}

由于AutoReset属性被设置为true,不需要停止和开始定时器

_timer.Stop();

这一行导致了这个问题。删除它