我正在尝试制作一个简单的倒数计时器程序。有两个计时器对象。一旦timer1
用完,它就会停止,timer2
开始倒计时。当timer2
时间不足时,timer1
会重新开始,依此类推。这是我的代码:
private void timer1_Tick(object sender, EventArgs e)
{
milli1--;
if(milli1 == -1)
{
sec1--;
milli1 = 59;
if (sec1 == -1)
{
min1--;
sec1 = 59;
if (min1 == -1)
{
min1 = 0;
sec1 = 0;
milli1 = 0;
Console.WriteLine("Timer1 stops!");
timer1.Stop();
timer2.Start();
}
}
}
//updates displayed time
}
然而,当timer1停止时,timer2似乎没有启动。不知何故,timer1继续滴答并连续输出“Timer1 Stops!”控制台。我该如何解决这个问题?
编辑:这是我的timer2_Tick():
private void timer2_Tick(object sender, EventArgs e)
{
milli2--;
if (milli2 == -1)
{
sec2--;
milli2 = 59;
if (sec2 == -1)
{
min2--;
sec2 = 59;
if (min2 == -1)
{
min2 = 0;
sec2 = 0;
milli2 = 0;
timer2.Stop();
timer1.Start();
}
}
}
//updates displayed time
}
编辑2:两个具有相同间隔的定时器是一件小事。当定时器具有不同的间隔时,我的代码也不起作用。
答案 0 :(得分:0)
我不确定为什么要将Timer用作控制台应用程序,因为它不像Windows.Forms.Timer那样是事件驱动的。您可能正在使用线程计时器,但您的代码将无法使用此计时器。所以下面我创建了一个Windows窗体应用程序,并将输出类型设置为控制台,并按照您的描述使用计时器,它按预期工作。我认为您不能像在控制台应用程序中那样使用计时器。同样,这个代码没有多大意义,因为ONE计时器会做同样的事情。如果您必须使用控制台应用程序,那么您可能需要查看以下帖子:How do you add a timer to a C# console application
int milli1 = 0;
int milli2 = 0;
int sec1 = 0;
int min1 = 0;
int sec2 = 0;
int min2 = 0;
public Form1() {
InitializeComponent();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e) {
Console.WriteLine("Timer1 tick!");
milli1--;
if (milli1 == -1) {
sec1--;
milli1 = 59;
if (sec1 == -1) {
min1--;
sec1 = 59;
if (min1 == -1) {
min1 = 0;
sec1 = 0;
milli1 = 0;
//Console.WriteLine("Timer1 stops!");
timer1.Stop();
timer2.Start();
}
}
}
//updates displayed time
}
private void timer2_Tick(object sender, EventArgs e) {
Console.WriteLine("Timer2 tick!");
milli2--;
if (milli2 == -1) {
sec2--;
milli2 = 59;
if (sec2 == -1) {
min2--;
sec2 = 59;
if (min2 == -1) {
min2 = 0;
sec2 = 0;
milli2 = 0;
timer2.Stop();
timer1.Start();
}
}
}
//updates displayed time
}
}