C# - 使用计时器重复方法调用

时间:2010-03-23 23:55:37

标签: c# vsto delay timing

在我正在开发的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次经过事件,之后执行任意长度任务停止。但UI线程似乎在每个任务之间挂起3-5秒。

定时器是否有“预热”时间开始?这就是为什么它的第一次(也是最后一次)过去需要这么长时间?

我使用哪种类型的计时器?

2 个答案:

答案 0 :(得分:2)

也许你的计算时间比你想象的要长。计时器没有任何热身。

有什么理由你不能使用后台线程,也许是BackgroundWorker对象来运行计算而不需要计时器?

答案 1 :(得分:2)

我建议不要使用计时器,而是建议在不同的线程中进行计算(生成线程),并使用 Thread.Sleep(毫秒)在间隔之间休眠。这对我来说非常有效。