C# 计时器.已用事件连续触发两次



我有一个应用程序,它每 60 秒调用一次 DLL 中的静态方法,作为系统"自检"应用程序的一部分。当我手动运行这些方法时,它们都在不到 10 秒的时间内完成。我的问题是 timer.elapsed 事件触发了两次,一个接一个。除此之外,每次计时器经过时,事件都会再次触发。(例如,第一次是 2 次射击,第二次是 3 次,第三次是 4 次,依此类推)我试过设置计时器。自动复位 = 假以及设置计时器。已启用 = 在已用事件开始时为 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);

最新更新