Как остановить таймер System.Threading.Timer - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Пытаюсь написать простую программу "Секундомер" с использованием класса System.Threading.Timer. (проект во вложении) Не могу понять, как правильно остановить таймер. Использую свойство Change:
        private void Pause_Click(object sender, EventArgs e)
        {
            t1.Change(0, 0);
        }
но при нажатии на данную кнопку первый раз секундомер останавливается. А уже при нажатии второй и следующие разы к значению отображаемого в текстбоксе времени прибавляется 100 мс. Не могу понять вообще, почему это происходит? Ведь данный метод даже в текстбоксе ничего не должен менять. Если использовать

System.Timers.Timer

, то там есть метод Старт, Стоп и все понятно и работает.

А как в данном случае правильно останавливать этот таймер?

весь код проекта:
namespace MyExp
{
    public partial class Form1 : Form
    {
        System.Threading.Timer t1;
 
        DateTime dt;
        TimeSpan ts;
 
        public Form1()
        {
            InitializeComponent();
            dt=new DateTime(365, 12, 31, 0,0,0,0);
            ts = new TimeSpan(0, 0, 0, 0, 0); 
             
        }
 
        private void Start_Click(object sender, EventArgs e)
        {
            t1 = new System.Threading.Timer(new TimerCallback(metod2_SekundomerStart), null, 0, 10);
        }
 
        private void Pause_Click(object sender, EventArgs e)
        {
           t1.Change(0, 0);
        }
 
        private void reset_Click(object sender, EventArgs e)
        {
            ts=new TimeSpan(0, 0, 0, 0, 0);
            textBox2.Text = ts.ToString(@"hh\:mm\:ss\:ff");
        }

        private void metod2_SekundomerStart(object state)
        {
            Action action = delegate
            {
                ts = ts.Add(new TimeSpan(0, 0, 0, 0, 10));
                textBox2.Text = ts.ToString(@"hh\:mm\:ss\:ff");
            };
            Invoke(action);
        }
 
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Application.Exit();
            t1.Change(0, 0);
            t1.Dispose();
        }
    }
 
    class MyClass
    {
 
    }
}

Решение задачи: «Как остановить таймер System.Threading.Timer»

textual
Листинг программы
t1.Change(System.Threading.Timeout.Infinite, 0);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5