как реализовать сервисный цикл окон, который ожидает в течение периода в C#/.NET2.0

Мой вопрос, это - это лучшая практика, чтобы сделать это. Не удалось найти хорошие примеры. У меня есть следующий код в файле, созданном VS2005:

public partial class ObjectFolder : ServiceBase
{
    protected override void OnStart(string[] args)
    {
        ObjectFolderApp.Initialize();

        ObjectFolderApp.StartMonitorAndWork();
    }

    protected override void OnStop()
    {
        // TODO: Add code here to perform any tear-down necessary to stop yourservice.
    } 
}

затем:

class ObjectFolderApp
{
    public static bool Initialize()
    {
        //all init stuff
        return true;
    }


    public static void StartMonitorAndWork()
    {
        Thread worker = new Thread(MonitorAndWork);
        worker.Start();
    }


    private static void MonitorAndWork()
    {
        int loopTime = 60000;
        if (int.TryParse(_cfgValues.GetConfigValue("OfWaitLoop"), out loopTime))
            loopTime = 1000 * loopTime;

        while (true)
        {
            /* create+open connection and fill DataSet */
            DataSet ofDataSet = new DataSet("ObjectFolderSet");
            using (_cnctn = _dbFactory.CreateConnection())
            {
                _cnctn.Open();

                //do all kinds of database stuff
            }
            Thread.Sleep(loopTime);
        }
    }
}
5
задан radbyx 26 September 2012 в 13:50
поделиться

2 ответа

Повторно хешируя мой ответ из на этот вопрос , рекомендуется использовать таймер и следующие код:

public class MyService : ServiceBase
{
    private Timer workTimer;    // System.Threading.Timer

    protected override void OnStart(string[] args)
    {
        workTimer = new Timer(new TimerCallback(DoWork), null, 5000, 5000);
        base.OnStart(args);
    }

    protected override void OnStop()
    {
        workTimer.Dispose();
        base.OnStop();
    }

    private void DoWork(object state)
    {
        RunScheduledTasks();  // Do some work
    }
}

Все просто!

Обратите внимание, что используемый тип Timer - это System.Threading.Timer , то же, что и Justin .

14
ответ дан 18 December 2019 в 09:48
поделиться

Используйте System.Threading.Timer , чтобы запустить процесс через запланированный интервал.

3
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: