C # - повторение вызова метода с использованием таймеров - PullRequest
2 голосов
/ 24 марта 2010

В разрабатываемой надстройке 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 секунд между каждой задачей.

Есть ли у таймеров время для разогрева? Вот почему так много времени уходит на первое (и последнее) истечение?

Какой тип таймера мне использовать вместо этого?

Ответы [ 2 ]

2 голосов
/ 24 марта 2010

Вместо использования таймера я рекомендую выполнять вычисления в другом потоке (порождать поток) и использовать Thread.Sleep (миллисекунды) для ожидания между интервалами. Это сработало для меня чудесно.

2 голосов
/ 24 марта 2010

Может быть, ваши расчеты занимают больше времени, чем вы думали. Таймеры не разогреваются.

Есть ли причина, по которой вы не можете использовать фоновый поток, может быть, объект BackgroundWorker для выполнения вычислений без таймера?

...