Member 13443427 Ответов: 1

Служба Windows запускается каждые один час


У меня есть служба windows, которая должна работать в течение каждого часа. Но проблема в том, что он начинается в 6.00 утра и заканчивается в 6.03 утра, а затем снова через час он начинает работать в 7.03 утра, но я хочу, чтобы он снова работал в 7.00 утра.
Любая помощь будет оценена по достоинству.
Код, который я написал, находится ниже

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Ashworth.WindowService.GradeDataFeed
{
    public partial class GradeDataFeedService : ServiceBase
    {
            private readonly System.Timers.Timer _timer;
            GradeDataFeedManager gradeDataFeedManager;
            //Thread managerThread = null;

            public GradeDataFeedService()
            {
                InitializeComponent();

                _timer = new System.Timers.Timer();
                _timer.Elapsed += timer_Elapsed;
            }

            protected override void OnStart(string[] args)
            {
                _timer.Interval = 60 * 1000;
                _timer.Enabled = true;
                _timer.Start();
            }

            private void timer_Elapsed(object sender, EventArgs e)
            {
                // Only create / start the manager if has been done so already
                // It should only all in once, since the manager object will not
                // be null and since the timer will be disabled after first run
                if (gradeDataFeedManager == null)
                {
                gradeDataFeedManager = new GradeDataFeedManager();

                // Create thread for manager
                //managerThread = new Thread(shipmentTrackingNumberProcessorManager.Start);

                // Start the thread
                gradeDataFeedManager.Start();

                    // Stop timer, it only needs to run once to kick off the manager
                    _timer.Enabled = false;
                }
            }

            protected override void OnStop()
            {
                if (gradeDataFeedManager != null)
                {
                gradeDataFeedManager.Stop();
                }
            }
        }
    }

F-ES Sitecore

Вы можете повторно инициализировать таймер после завершения работы, поэтому вычислите количество секунд до следующего часа, установите его в качестве интервала и снова включите таймер. Или же пусть он просыпается каждую секунду и смотрит, не наступил ли еще следующий час.

1 Ответов

Рейтинг:
2

Andy Lanng

Во-первых, вам не нужна услуга. Вам нужно простое консольное приложение, которое запускается из запланированной задачи

В противном случае вам придется проверять текущее время каждые, скажем, 1 секунду, чтобы увидеть, соответствует ли текущее время часу