C# Timer.Elapsed Событие запускается дважды подряд
У меня есть приложение, которое вызывает статические методы в DLL каждые 60 секунд, как часть системного приложения "самопроверки". Когда я вручную запускаю методы, все они завершаются менее чем за 10 секунд. Моя проблема в том, что событие timer.elapsed запускается дважды, один за другим. Чтобы добавить к этому, каждый раз, когда таймер истекает, событие запускается еще раз. (например, в первый раз это 2 выстрела, во-вторых это 3, в третьем это 4 и т. д.) Я попытался установить timer.AutoReset = false вместе с установкой timer.Enabled = false в начале прошедшего события, а затем установить его в значение true в конце мероприятия. Я попытался сбросить интервал в событии. Каждый найденный мной пост указывает, что вышеуказанные действия должны были решить эту проблему. Может ли кто-нибудь помочь мне найти то, что мне не хватает?
static Timer cycle = new Timer();
static int cycCount = 0;
static void Main(string[] args)
{
Console.WriteLine("Firebird Survivor Auto Cycle Started.");
Console.CancelKeyPress += Console_CancelKeyPress;
cycle.Interval = 60000; //set interval for service checks.
cycle.Elapsed += new ElapsedEventHandler(CycleComplete_Elapsed);
cycle.AutoReset = false;
cycle.Enabled = true;
cycle.Elapsed += CycleComplete_Elapsed;
while (1 == 1) //stop main method from completing indefinitely
{
//WAIT FOR TIMER TO ELAPSE
}
}
private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
cycle = null;
}
static void CycleComplete_Elapsed(object sender, ElapsedEventArgs e) //method triggered by timer
{
cycle.Enabled = false;
cycCount++;
WormholeServiceControls.CheckWormHoleStatus();
TimeControls.CheckTimePl(); //call time check
PegasusServiceControls.CheckPegasusStatus(null);
Console.Clear();
Console.WriteLine("--------------------------");
Console.WriteLine(String.Format("| Successful Cycles: {0} |", cycCount));
Console.WriteLine("--------------------------");
cycle.Enabled = true;
}
1 ответ
Кажется, ваша проблема связана с обработкой событий, которые вы делаете. Вы назначаете Elapsed
событие более одного раза:
cycle.Elapsed += new ElapsedEventHandler(CycleComplete_Elapsed);
cycle.Elapsed += CycleComplete_Elapsed;
Почему это две строки? Вы будете в порядке только с этим:
cycle.Elapsed += new ElapsedEventHandler(CycleComplete_Elapsed);