У меня есть приложение, которое вызывает статические методы в 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;
}