[英]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.