检查倒计时是否为0
Check if the countdown timer is 0
我有一个基于倒数计时器的脚本。我希望当时间达到 0 时,计时器停止并出现一条消息。代码标识为:
public partial class simulare : Form
{
private admin admin;
Timer timer = new Timer();
public simulare(admin admin)
{
InitializeComponent();
this.admin=admin;
label2.Text = TimeSpan.FromMinutes(0.1).ToString();
}
private void simulare_Load(object sender, EventArgs e)
{
var startTime = DateTime.Now;
timer = new Timer() { Interval = 1000 };
timer.Tick += (obj, args) =>
label2.Text = (TimeSpan.FromMinutes(0.1) - (DateTime.Now - startTime)).ToString("hh\:mm\:ss");
timer.Enabled = true;
timer.Start();
if (condition)
{
timer.Stop();
MessageBox.Show("Done!");
}
}
}
我尝试了那些条件,但没有成功:
if (timer.ToString() == TimeSpan.Zero.ToString())
if (label2.Text.ToString() == TimeSpan.Zero.ToString())
if (label2.Text == TimeSpan.Zero)
首先,检查 Load
事件中的 任何内容 是行不通的。该代码仅运行一次(在表单加载时)。
所以你需要一个更复杂的滴答事件,我会把它放到一个实际的函数而不是 lambda 中:
private int countDown = 50; //Or initialize at load time, or whatever
public void TimerTick(...)
{
label2.Text = (TimeSpan.FromMinutes(0.1) - (DateTime.Now - startTime)).ToString("hh\:mm\:ss");
countDown--;
if (countDown <= 0)
timer.Stop();
}
我在这里使用 int
计数器,因为检查视图 属性(本例中的文本)不是很好 design/practice。如果你真的想要一个 TimeSpan
,我仍然会把它保存下来,而不是直接检查 Text
属性 或一个字符串。
您可以提取计算并将结果分配给 TimeSpan 变量,然后检查该 TimeSpan 变量中的秒数是否等于零
void simulare_Load(object sender, EventArgs e)
{
var startTime = DateTime.Now;
timer = new System.Windows.Forms.Timer() { Interval = 1000 };
timer.Tick += (obj, args) =>
{
TimeSpan ts = TimeSpan.FromMinutes(0.1) - (DateTime.Now - startTime);
label1.Text = ts.ToString("hh\:mm\:ss");
if (ts.Seconds == 0)
{
timer.Stop();
MessageBox.Show("Done!");
}
};
timer.Start();
}
我有一个基于倒数计时器的脚本。我希望当时间达到 0 时,计时器停止并出现一条消息。代码标识为:
public partial class simulare : Form
{
private admin admin;
Timer timer = new Timer();
public simulare(admin admin)
{
InitializeComponent();
this.admin=admin;
label2.Text = TimeSpan.FromMinutes(0.1).ToString();
}
private void simulare_Load(object sender, EventArgs e)
{
var startTime = DateTime.Now;
timer = new Timer() { Interval = 1000 };
timer.Tick += (obj, args) =>
label2.Text = (TimeSpan.FromMinutes(0.1) - (DateTime.Now - startTime)).ToString("hh\:mm\:ss");
timer.Enabled = true;
timer.Start();
if (condition)
{
timer.Stop();
MessageBox.Show("Done!");
}
}
}
我尝试了那些条件,但没有成功:
if (timer.ToString() == TimeSpan.Zero.ToString())
if (label2.Text.ToString() == TimeSpan.Zero.ToString())
if (label2.Text == TimeSpan.Zero)
首先,检查 Load
事件中的 任何内容 是行不通的。该代码仅运行一次(在表单加载时)。
所以你需要一个更复杂的滴答事件,我会把它放到一个实际的函数而不是 lambda 中:
private int countDown = 50; //Or initialize at load time, or whatever
public void TimerTick(...)
{
label2.Text = (TimeSpan.FromMinutes(0.1) - (DateTime.Now - startTime)).ToString("hh\:mm\:ss");
countDown--;
if (countDown <= 0)
timer.Stop();
}
我在这里使用 int
计数器,因为检查视图 属性(本例中的文本)不是很好 design/practice。如果你真的想要一个 TimeSpan
,我仍然会把它保存下来,而不是直接检查 Text
属性 或一个字符串。
您可以提取计算并将结果分配给 TimeSpan 变量,然后检查该 TimeSpan 变量中的秒数是否等于零
void simulare_Load(object sender, EventArgs e)
{
var startTime = DateTime.Now;
timer = new System.Windows.Forms.Timer() { Interval = 1000 };
timer.Tick += (obj, args) =>
{
TimeSpan ts = TimeSpan.FromMinutes(0.1) - (DateTime.Now - startTime);
label1.Text = ts.ToString("hh\:mm\:ss");
if (ts.Seconds == 0)
{
timer.Stop();
MessageBox.Show("Done!");
}
};
timer.Start();
}