2

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

计时器是否有启动的“热身”时间?这就是为什么它的第一次(也是最后一次)过去需要这么长时间吗?

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

4

2 回答 2

2

也许您的计算花费的时间比您想象的要长。计时器没有任何类型的热身。

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

于 2010-03-24T00:04:29.213 回答
2

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

于 2010-03-24T00:07:55.867 回答