Я пытаюсь понять класс таймера и связанную с ним обработку событий. У меня есть приложение, которое нужно будет вызывать событие в определенное время, зависящее от данных, извлеченных из базы данных. Естественно запланированные задачи для этого не подходят.C# WinForms многократный повторитель таймера дублирующий обработчик событий
Вот код, который я пытаюсь понять
private Timer setTimer = new Timer();
public Form1()
{
InitializeComponent();
TimedProcess(null, null);
}
private void SetTimer(DateTime dtNextStop)
{
TimeSpan span = dtNextStop - DateTime.Now;
int ms = (int)span.TotalMilliseconds;
setTimer.Interval = ms;
setTimer.Tick += new EventHandler(TimedProcess);
setTimer.Start();
}
public void TimedProcess(Object sender, EventArgs e)
{
setTimer.Stop();
setTimer.Dispose();
txtLog.Text = txtLog.Text = "Tick " + DateTime.Now.ToString("HH:mm:ss") + "\r\n" + txtLog.Text;
SetTimer(DateTime.Now.AddSeconds(4));
}
Я пытался быть умным (ха-ха потерпел неудачу в том, что один), объявив таймер на глобальном уровне, чтобы сэкономить ресурсы и использовать это для следующего временного разреза , Я заметил, что приложение было утечкой памяти, поэтому я создал текстовое поле для вывода тиков. Это принесло некоторые странные результаты. Я, очевидно, что-то делаю неправильно, любая помощь будет очень признательна.
Tick 18:44:50
Tick 18:44:50
Tick 18:44:50
Tick 18:44:50
Tick 18:44:50
Tick 18:44:50
Tick 18:44:50
Tick 18:44:50
Tick 18:44:46
Tick 18:44:46
Tick 18:44:46
Tick 18:44:46
Tick 18:44:42
Tick 18:44:42
Tick 18:44:38
Tick 18:44:34
Согласен. Нет причин для 'setTimer.Dispose()'. –
Конечно, большое вам спасибо –