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

时间:2015-08-27 04:16:57

标签: c# timer

我在Window Form Application上创建了新的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

之前我找到了this question,但它没有解决我的问题

2 个答案:

答案 0 :(得分:5)

您需要先设置事件处理程序才能启动计时器。那是在你致电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");
        }
    }
}

答案 1 :(得分:1)

您可能希望在此使用System.Windows.Forms.Timer而不是System.Timers.TimerSystem.Windows.Forms.Timer有一个Tick事件会自动触发每N毫秒(您可以使用Interval属性设置,就像System.Windows.Forms.Timer一样。这与System.Timers.Timer不同,Elapsed仅触发System.Windows.Forms.Timer事件一次,更像是定时炸弹,而不是“预定的自动收报机”。

如果您必须使用AutoReset,则应将True属性设置为AutoReset,以便重复发生事件。

修改

似乎在某些时候他们已将true属性的默认值更改为System.Timers.Timer;意味着Elapsed现在默认重复触发System.Windows.Forms.Timer事件,就像.map()一样。但请注意Microsoft explicitly recommends using System.Windows.Forms.Timer in WinForms applications,就像我上面那样。