System.Timers.Timer.Elapsed事件未触发



我已经创建了新的Timer变量在我的窗口窗体应用程序:

intervalTime = new System.Timers.Timer();
intervalTime.Interval = 5000;
intervalTime.Enabled = true;
Console.WriteLine(intervalTime.Enabled.ToString());
intervalTime.Elapsed += new ElapsedEventHandler(intervalTime_Elapsed);
Console.WriteLine(intervalTime.Enabled.ToString());

Timer将每5秒执行一次,ElapsedEvent:

void intervalTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
      //Do something....
}

ElapsedEvent完全不开火。我该怎么做才能使它开火呢?我检查intervalTime.Enabledtrue

我以前发现过这个问题,但它不能解决我的问题

您需要在启动计时器之前设置事件处理程序。这是在调用intervalTime.Enabled = true;

之前
using System;
using System.Timers;
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            var intervalTime = new System.Timers.Timer();
            //Do IT HERE
            intervalTime.Elapsed += new ElapsedEventHandler(intervalTime_Elapsed);
            intervalTime.Interval = 5000;
            intervalTime.Enabled = true;
            Console.WriteLine(intervalTime.Enabled.ToString());
            Console.WriteLine(intervalTime.Enabled.ToString());
            Console.ReadLine();
        }

        static void intervalTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //Do something....
            Console.WriteLine("New event fired");
        }
    }
}

您可能想在这里使用System.Windows.Forms.Timer而不是System.Timers.TimerSystem.Windows.Forms.Timer有一个Tick事件,每N毫秒自动触发一次(您可以像System.Windows.Forms.Timer一样使用Interval属性设置)。这与System.Timers.Timer不同,Elapsed事件只触发一次,它更像一个定时炸弹,而不是一个"预定的计时器"。

如果您必须使用System.Windows.Forms.Timer,您应该将AutoReset属性设置为True,以便事件重复发生。

编辑

似乎在某些时候他们已经改变了AutoReset属性的默认值为true;这意味着System.Timers.Timer现在默认情况下重复触发Elapsed事件,就像System.Windows.Forms.Timer一样。但是,请注意,微软明确建议在WinForms应用程序中使用System.Windows.Forms.Timer,就像我上面所做的那样。

我不确定我们是否必须在定义它之后启动这个计时器。

也许我们应该这样做:

intervalTime.Start ();

最新更新