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''");
}
这是我实现的具有倒数计时器的 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''");
}