C# - Win Form 停止计时器滴答

C# - Win Form stopping Timer tick

这是我实现的具有倒数计时器的 Win Form 应用程序:

readonly DateTime myThreshold;
public Form1()
{
    InitializeComponent();

    myThreshold = Utils.GetDate();
    Timer timer = new Timer();
    timer.Interval = 1000; //1 second
    timer.Tick += new EventHandler(t_Tick);
    timer.Start();

    //Threshold check - this only fires once insted of each second
    if (DateTime.Now.CompareTo(myThreshold) > 0)
    {
        // STOP THE TIMER
        timer.Stop();
    }
    else
    {
        //do other stuff
    }
}

void t_Tick(object sender, EventArgs e)
{
    TimeSpan timeSpan = myThreshold.Subtract(DateTime.Now);
    this.labelTimer.Text = timeSpan.ToString("d' Countdown - 'hh':'mm':'ss''");
}

想要的行为是在达到阈值时停止计时器和tick函数。

现在不会发生这种情况,因为检查只执行一次,因为它被放置在 Form1 初始化中。

是否存在一种方法来添加此检查以在满足条件后立即停止计时器?

如果我们将 timer 定义为 class 字段(因此可以从 class 中的所有方法访问它),那么我们只需将检查添加到 Tick 事件本身,并从那里停止计时器:

private Timer timer = new Timer();

void t_Tick(object sender, EventArgs e)
{
    // Stop the timer if we've reached the threshold
    if (DateTime.Now > myThreshold) timer.Stop();

    TimeSpan timeSpan = myThreshold.Subtract(DateTime.Now);
    this.labelTimer.Text = timeSpan.ToString("d' Countdown - 'hh':'mm':'ss''");
}