簡體   English   中英

C#Timer.Elapsed事件連續觸發兩次

[英]C# Timer.Elapsed Event firing twice consecutively

我有一個應用程序,它作為系統“自檢”應用程序的一部分,每60秒在DLL中調用一次靜態方法。 當我手動運行這些方法時,它們都將在不到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;
}

看來您的問題出在您正在執行的事件處理上。 您已為Elapsed事件分配了多個時間:

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

為什么要這兩行? 僅此,您將沒事:

cycle.Elapsed += new ElapsedEventHandler(CycleComplete_Elapsed);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM