System.Timers.Timer.Elapsed事件未触发
本文关键字:事件 Elapsed Timers Timer System | 更新日期: 2023-09-27 18:09:57
我已经创建了新的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
。
我以前发现过这个问题,但它不能解决我的问题
您需要在启动计时器之前设置事件处理程序。这是在调用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.Timer
。System.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 ();