我在窗口窗体应用程序上创建了新的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,但它不能解决我的问题
发布于 2015-08-27 04:25:08
您可能希望在这里使用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一样。但是,请注意 in WinForms applications,就像我上面所做的一样。
发布于 2015-08-27 04:20:34
您需要在启动计时器之前设置事件处理程序。在你打电话给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");
}
}
}发布于 2015-08-27 05:50:44
我不确定我们是否必须在定义这个计时器之后启动它。
也许我们应该这样做:
intervalTime.Start();
https://stackoverflow.com/questions/32240628
复制相似问题