我在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.Enabled
是true
。
之前我找到了this question,但它没有解决我的问题
答案 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.Timer
。 System.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,就像我上面那样。