0

Хочу сделать секундомер: введите сюда описание изображения

Когда нажимаю на кнопку "Stop" останавливается отображение отсчета времени, но отсчет времени на самом деле не останавливается.

Что можно сделать? Вот код:

    DateTime date;
    Timer timer=new Timer();
private void buttonStart_Click(object sender, EventArgs e)
{            
        date = DateTime.Now;
        timer.Interval = 10;
        timer.Tick += new EventHandler(tickTimer);
        timer.Start();            
}

private void buttonStop_Click(object sender, EventArgs e)
{
    timer.Stop();
}

private void buttonContinue_Click(object sender, EventArgs e)
{
    timer.Start();
}

private void tickTimer(object sender, EventArgs e)
{
    long tick = DateTime.Now.Ticks - date.Ticks;
    DateTime stopWatch = new DateTime();

    stopWatch = stopWatch.AddTicks(tick);
    labelStopWatch.Text = String.Format("{0:HH:mm:ss}", stopWatch);
}

Переписал код через Stopwatch():

    private readonly Stopwatch stopwatch = new Stopwatch();
private void buttonStart_Click(object sender, EventArgs e)
{
    stopwatch.Start();
}
private void buttonStop_Click(object sender, EventArgs e)
{
    stopwatch.Stop();
}

private void buttonContinue_Click(object sender, EventArgs e)
{
    stopwatch.Start();
}

private void TimeTick(object sender, EventArgs e)
{
    labelStopWatch.Text = stopwatch.Elapsed.ToString("HH:mm:ss");
}

Где и как запустить TimeTick()?

Debugger
  • 47
  • 6
  • timer.Tick += new EventHandler(tickTimer); этого не надо делать каждый раз при нажатии на кнопку, это надо сделать 1 раз в конструкторе формы или обработчике события Form.Load. – aepot Apr 18 '23 at 16:38
  • вообще использовать таймер для отсчета времени это плохая идея т.к. таймер не гарантирует что тикнет через заданное время. Будет практически наверняка время "скользить". Советую написать класс который будет работать на основе Stopwatch. Тогда секундомер точно будет работать как необходимо. – Andrew Stop_RU_war_in_UA Apr 18 '23 at 17:05
  • 1
    @AndrewStop_RU_war_in_UA в ссылке на дубль разве не оно? :) – aepot Apr 18 '23 at 20:05
  • @aepot, там метод TimeTick() нигде не вызывается. Не знаю где и как его вызывать? – Debugger Apr 19 '23 at 05:24
  • 1
    Настолько всё плохо? Там таймер заведён и настроен через дизайнер формы. TimeTick это обработчик события таймера, то же самое что у вас tickTimer. – aepot Apr 19 '23 at 05:55

0 Answers0