2017-02-01 135 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