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