繁体   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