C#:2个Timer对象无效?

时间:2017-01-22 16:44:42

标签: c# visual-studio time timer

我正在尝试制作一个简单的倒数计时器程序。有两个计时器对象。一旦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:两个具有相同间隔的定时器是一件小事。当定时器具有不同的间隔时,我的代码也不起作用。

1 个答案:

答案 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
}
}