C# Timer.Elapsed 事件连续触发两次
C# Timer.Elapsed Event firing twice consecutively
我有一个应用程序,作为系统 "self-check" 应用程序的一部分,每 60 秒调用一次 DLL 中的静态方法。当我手动 运行 这些方法时,它们都在不到 10 秒的时间内完成。我的问题是 timer.elapsed 事件触发了两次,一个接一个。此外,每次计时器结束时,事件都会再触发一次。 (例如,第一次是 2 次触发,第二次是 3 次,第三次是 4 次,等等)我尝试在经过的事件开始时设置 timer.AutoReset = false 以及设置 timer.Enabled = false 然后在事件结束时将其设置为 true。我试过重置事件的间隔。我发现的每个 post 都表明上述操作应该已经解决了这个问题。谁能帮我找到我丢失的东西?
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);
我有一个应用程序,作为系统 "self-check" 应用程序的一部分,每 60 秒调用一次 DLL 中的静态方法。当我手动 运行 这些方法时,它们都在不到 10 秒的时间内完成。我的问题是 timer.elapsed 事件触发了两次,一个接一个。此外,每次计时器结束时,事件都会再触发一次。 (例如,第一次是 2 次触发,第二次是 3 次,第三次是 4 次,等等)我尝试在经过的事件开始时设置 timer.AutoReset = false 以及设置 timer.Enabled = false 然后在事件结束时将其设置为 true。我试过重置事件的间隔。我发现的每个 post 都表明上述操作应该已经解决了这个问题。谁能帮我找到我丢失的东西?
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);