2017-02-01 66 views
0

我有一个应用程序每60秒调用一次DLL中的静态方法,作为系统“自检”应用程序的一部分。当我手动运行这些方法时,它们都在不到10秒的时间内完成。我的问题是timer.elapsed事件发生两次,一个接一个地发生。为了补充说明,每次计时器过去时,事件再次触发一次。 (例如,第一次是2次,第二次是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

现在我觉得非常荒谬。谢谢@nicoriff。 – daemonx1