如何在每10分钟内在服务中运行一个函数?

Beg*_*ner 7 c# windows-services

我有一个运行的Windows服务,在这里我想每隔几分钟运行一个功能.我找到了一些代码,但似乎没有用?我有一个记录器,它似乎没有进入timer_Elapsed函数?

 protected override void OnStart(string[] args)
    {
       // SmartImportService.WebService.WebServiceSoapClient test = new WebService.WebServiceSoapClient();
       // test.Import();
         log.Info("Info - Service Started");
        _timer = new Timer(10 * 60 * 1000); // every 10 minutes??
        _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    }

    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        log.Info("Info - Check time");
        DateTime startAt = DateTime.Today.AddHours(9).AddMinutes(48);
        if (_lastRun < startAt && DateTime.Now >= startAt)
        {
            // stop the timer 
            _timer.Stop();               

            try
            {
                log.Info("Info - Import");
                SmartImportService.WebService.WebServiceSoapClient test = new WebService.WebServiceSoapClient();
                test.Import();
            }
            catch (Exception ex) {
                log.Error("This is my error - ", ex);
            }

            _lastRun = DateTime.Now;
            _timer.Start();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*rth 19

你需要启动计时器:

protected override void OnStart(string[] args)
{
     log.Info("Info - Service Started");
    _timer = new Timer(10 * 60 * 1000); // every 10 minutes
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    _timer.Start(); // <- important
}
Run Code Online (Sandbox Code Playgroud)

  • 在10分钟内,我更喜欢使用`TimeSpan.FromMinutes(10).TotalMilliseconds;`而不是`10*60*1000` (4认同)