首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# -使用计时器重复方法调用

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

Stack Overflow用户
提问于 2010-03-24 07:55:37
回答 2查看 4.9K关注 0票数 2

在我正在开发的VSTO外接程序中,我需要以特定的延迟执行一个方法。棘手的部分是,该方法的执行时间可能在0.1秒到1秒之间。我目前使用的System.Timers.Timer是这样的:

代码语言:javascript
复制
    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();
    }

它基本上启动,引发一个elapse事件,之后它被停止,因为执行任意长度的任务。但UI线程似乎会在每个任务之间挂起3-5秒。

计时器有“热身”时间开始吗?这就是为什么它花了这么长时间才第一次(也是最后一次)过去?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-24 08:07:56

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

票数 2
EN

Stack Overflow用户

发布于 2010-03-24 08:04:29

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2504483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档