User 10734264 Ответов: 1

Как спроектировать сервис windows с таймером 1 минута ?


Привет Я разрабатываю службу windows на языке c#. Я установил временной интервал в 1 минуту.
Как проверить, что предыдущий процесс завершен при следующем запуске таймера, чтобы предотвратить многократный вход.
Я хочу проверить предыдущий процесс обслуживания, если этот процесс не завершен, я хочу пропустить этот текущий процесс.

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

я установил
public bool isComplete = true;
по таймеру я проверил

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    if (isComplete == true)
    {
        try
        {
            isComplete = false;
            eventLog1.WriteEntry("Service Initial Started at " + DateTime.Now.ToString() + Environment.NewLine);
            NexGenServiceRun();
            eventLog1.WriteEntry("Service Final Completed at " + DateTime.Now.ToString() + Environment.NewLine);
            isComplete = true;
        }
        catch
        {
            isComplete = true;
        }

    }
    else
    {
        eventLog1.WriteEntry("Service not started, Previous service is not completed " + Environment.NewLine );
    }
}

1 Ответов

Рейтинг:
1

Midi_Mick

В общем, ваша идея верна. Единственной проблемой будет возможное условие гонки для вашей переменной isComplete. Вместо того чтобы выполнять проверки/назначения, как вы это сделали, используйте Сблокированный.Метод Обмена (T) (T, T) (Система.Нарезание резьбы)[^] для проверки существующего значения и установки его в значение false в атомарной операции.