定时器未启动

本文关键字:启动 定时器 | 更新日期: 2023-09-27 18:14:28

所以我想检查当前time每秒钟,如果seconds == 0引发event并显示当前时间:

using System.Timers;
public delegate void TimeHandler(object sender, TimeEventArgs e);
public class Clock
{
    private Timer timer;
    public event TimeHandler CurrentTime;
    public Clock()
    {
        timer = new Timer();
        timer.Elapsed += timer_Elapsed;
        timer.Interval = 1000;
    }
    public void Start()
    {
        timer.Enabled = true;
        timer.Start();
    }
    private void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        DateTime time = DateTime.Now;
        int sec = time.Second;
        if (sec == 0)
            if (CurrentTime != null)
                CurrentTime(this, new TimeEventArgs(time));
    }
}
public class TimeEventArgs
{
    public readonly DateTime Time;
    public TimeEventArgs(DateTime time)
    {
        Time = time;
    }
}

用法:

Clock clock = new Clock();
clock.CurrentTime += Clock_CurrentTime;
clock.Start();
private static void Clock_CurrentTime(object sender, TimeEventArgs e)
{
    Console.WriteLine(e.Time.ToShortTimeString());
}

但是好像计时器没有开始。

定时器未启动

您的timer_Elapsed不匹配currentTimeCurrentTime。如果选中委托,则应使用处理程序的大写名称。

你可以通过设置一个断点来确保Elapsed处理程序被调用,或者在它的开头直接放一条日志消息。

最后,Clock_CurrentTime每分钟只被调用一次。