В разрабатываемой надстройке VSTO мне необходимо выполнить метод с определенной задержкой. Сложность в том, что выполнение метода может занять от 0,1 до 1 секунды. В настоящее время я использую System.Timers.Timer
, как это:
private Timer tmrRecalc = new Timer();
// tmrRecalc.Interval = 500 milliseconds
private void tmrRecalc_Elapsed(object sender, System.Timers.ElapsedEventArgs e){
// stop the timer, do the task
tmrRecalc.Stop();
Calc.recalcAll();
// restart the timer to repeat after 500 ms
tmrRecalc.Start();
}
То, что в основном начинается, вызывает 1 событие истечения, после которого оно останавливается для выполнения задачи произвольной длины. Но поток пользовательского интерфейса зависает на 3-5 секунд между каждой задачей.
Есть ли у таймеров время для разогрева? Вот почему так много времени уходит на первое (и последнее) истечение?
Какой тип таймера мне использовать вместо этого?