【问题标题】:Which C# Timer?哪个 C# 计时器?
【发布时间】:2014-05-08 19:19:33
【问题描述】:

我正在编写一个包含计时器的类(关键可能不会在 0 处初始化,它可能已经开始),并且该类将包含开始、暂停、恢复和停止/完成的方法。我知道我可以使用 C# 中的许多计时器,即 System.Timers.Timer,但是我不确定这个是否可以让我以预定义的经过时间启动计时器。

什么是最适合这种情况的?

【问题讨论】:

标签: c# .net timer


【解决方案1】:

不要使用System.Windows.Forms.Timer - 这将在表单的 UI 线程上运行委托,这可能不是您想要的。

System.Timers.Timer 派生自 System.ComponentModel.Component,因此它面向设计表面。

System.Threading.Timer 最适合线程池上的后台任务。

System.Threading.Timer 满足您的所有要求(假设您尝试在线程池上运行委托。

public void MyCallback(object o) { ... }
int timeToStart = 1000;
int period = 2000;

//fire the delegate after 1 second, and every 2 seconds from then on
Timer timer = new Timer(MyCallback, null, timeToStart, period);

//pause
timer.Change(Timeout.Infinite, Timeout.Infinite);

//resume
timer.Change(timeToStart, period);

//stop
timer.Dispose();

【讨论】:

    【解决方案2】:

    System.Forms.Timer 类真正用于 UI 端,不如 System.Timers.Timer 类准确和优化。

    Forms.Timer 在 UI 线程(主线程)上运行,因此 UI 任务需要时间,并且 Timer 类在不同的线程上运行,导致主线程上没有负载。

    Timers.Timer 类还包含您想要的所有事件,请查看下面的链接以获取有关事件的更多详细信息

    http://msdn2.microsoft.com/en-us/library/system.windows.forms.timer.aspx

    http://msdn2.microsoft.com/en-us/library/system.timers.timer.aspx

    【讨论】:

      【解决方案3】:

      使用System.Timers.Timer

      根据您的间隔,您可以将计时器间隔设置为 1 秒(或 10 或 1 分钟),并检查每次是否通过了您自己的经过条件。基本上,您正在检查自己是否需要做某事。这样一来,您就可以将某个时期开始“进入”区间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-21
        • 2021-04-05
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多