Я пытаюсь реализовать простой обратный отсчет, используя таймер (используя код https://www.geoffstratton.com/cnet-countdown-timer). это работает, если я запускаю таймер один раз, но если я остановлю таймер или таймер перейдет к 00:00, в следующий раз, когда я его запусту, он пойдет в 2 раза быстрее. если я остановлю его и начну снова, он пойдет в 3 раза быстрее.
(моё объяснение может быть неясным, я сделал gif, который демонстрирует проблему)
https://media.giphy.com/media/fQr7sX6LNRECvQpCYP/giphy.gif
Я очень новичок в c #, я обычно все выясняю, но не могу понять, что здесь происходит.
Я включил код таймера. если кто-то может помочь мне с этим, это было бы здорово!
Спасибо !!!
private void btnStartTimer_Click(object sender, EventArgs e)
{
if (txtTimer.Text == "00:00")
{
MessageBox.Show("Please enter the time to start!", "Enter the Time", MessageBoxButtons.OK);
}
else
{
string[] totalSeconds = txtTimer.Text.Split(':');
int minutes = Convert.ToInt32(totalSeconds[0]);
int seconds = Convert.ToInt32(totalSeconds[1]);
timeLeft = (minutes * 60) + seconds;
btnStartTimer.Enabled = false;
btnCleartimer.Enabled = false;
txtTimer.ReadOnly = true;
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Start();
}
}
private void btnStopTimer_Click(object sender, EventArgs e)
{
timer1.Stop();
timeLeft = 0;
btnStartTimer.Enabled = true;
btnCleartimer.Enabled = true;
txtTimer.ReadOnly = false;
}
private void btnCleartimer_Click(object sender, EventArgs e)
{
txtTimer.Text = "00:00";
}
private void timer1_Tick(object sender, EventArgs e)
{
if (timeLeft > 0)
{
timeLeft = timeLeft - 1;
// Display time remaining as mm:ss
var timespan = TimeSpan.FromSeconds(timeLeft);
txtTimer.Text = timespan.ToString(@"mm\:ss");
// Alternate method
//int secondsLeft = timeLeft % 60;
//int minutesLeft = timeLeft / 60;
}
else
{
timer1.Stop();
SystemSounds.Exclamation.Play();
MessageBox.Show("Time's up!", "Time has elapsed", MessageBoxButtons.OK);
}
}