2017-02-01 7 views
0

У меня есть приложение, которое вызывает статические методы в DLL каждые 60 секунд как часть системного приложения «самопроверки». Когда я вручную запускаю методы, все они заканчиваются менее чем за 10 секунд. Моя проблема заключается в том, что событие timer.elapsed запускается дважды, один за другим. Чтобы добавить к этому, каждый раз, когда таймер истекает, событие срабатывает еще раз. (например, первый раз это 2 firings, второй - 3, третий - 4 и т. д.) Я попытался установить timer.AutoReset = false вместе с установкой timer.Enabled = false в начале прошедшего события, а затем установить его в true в конце мероприятия. Я попытался сбросить интервал в событии. Каждое обнаруженное мной сообщение указывает, что вышеупомянутые действия должны были решить эту проблему. Может ли кто-нибудь помочь мне найти то, что мне не хватает?C# Timer.Elapsed Событие срабатывает дважды подряд

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; 
} 
+0

Вы добавляете событие дважды. – LarsTech

+0

Спасибо @LarsTech. Я смотрел на это вечно и никогда не видел этого. – daemonx1

ответ

1

Похоже, ваша проблема связана с обработкой событий, которые вы делаете. Вы назначая Elapsed событие более чем один раз:

cycle.Elapsed += new ElapsedEventHandler(CycleComplete_Elapsed); 
cycle.Elapsed += CycleComplete_Elapsed; 

почему это две линии ?. У вас будет все в порядке:

cycle.Elapsed += new ElapsedEventHandler(CycleComplete_Elapsed); 
+0

А теперь я чувствую себя совершенно нелепо. Благодарю вас. – daemonx1