首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Timers.Timer.Elapsed事件不触发

System.Timers.Timer.Elapsed事件不触发
EN

Stack Overflow用户
提问于 2015-08-27 04:16:56
回答 3查看 8.6K关注 0票数 0

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

代码语言:javascript
复制
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执行一次

代码语言:javascript
复制
void intervalTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
      //Do something....
}

ElapsedEvent根本没有开火。我该怎么做才能让它开火?我检查intervalTime.Enabledtrue

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-27 04:25:08

您可能希望在这里使用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一样。但是,请注意 in WinForms applications,就像我上面所做的一样。

票数 1
EN

Stack Overflow用户

发布于 2015-08-27 04:20:34

您需要在启动计时器之前设置事件处理程序。在你打电话给intervalTime.Enabled = true;之前

代码语言:javascript
复制
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");
        }
    }
}
票数 7
EN

Stack Overflow用户

发布于 2015-08-27 05:50:44

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

也许我们应该这样做:

intervalTime.Start();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32240628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档