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

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

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

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

System.Timers.Timer

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

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

весь код проекта:
Листинг программы
  1. namespace MyExp
  2. {
  3. public partial class Form1 : Form
  4. {
  5. System.Threading.Timer t1;
  6. DateTime dt;
  7. TimeSpan ts;
  8. public Form1()
  9. {
  10. InitializeComponent();
  11. dt=new DateTime(365, 12, 31, 0,0,0,0);
  12. ts = new TimeSpan(0, 0, 0, 0, 0);
  13. }
  14. private void Start_Click(object sender, EventArgs e)
  15. {
  16. t1 = new System.Threading.Timer(new TimerCallback(metod2_SekundomerStart), null, 0, 10);
  17. }
  18. private void Pause_Click(object sender, EventArgs e)
  19. {
  20. t1.Change(0, 0);
  21. }
  22. private void reset_Click(object sender, EventArgs e)
  23. {
  24. ts=new TimeSpan(0, 0, 0, 0, 0);
  25. textBox2.Text = ts.ToString(@"hh\:mm\:ss\:ff");
  26. }
  27.  
  28. private void metod2_SekundomerStart(object state)
  29. {
  30. Action action = delegate
  31. {
  32. ts = ts.Add(new TimeSpan(0, 0, 0, 0, 10));
  33. textBox2.Text = ts.ToString(@"hh\:mm\:ss\:ff");
  34. };
  35. Invoke(action);
  36. }
  37. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  38. {
  39. Application.Exit();
  40. t1.Change(0, 0);
  41. t1.Dispose();
  42. }
  43. }
  44. class MyClass
  45. {
  46. }
  47. }

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут