我正在编写一个类,其中包括一个计时器(可能不会初始化为0,它可能已经开始),该类将包括启动、暂停、恢复和停止/完成等方法。我知道C#中有许多可用的计时器,例如System.Timers.Timer,但我不确定是否可以使用此计时器在预定义的已流逝时间处启动计时器。
对于这种情况,最好选择哪种计时器?
对于这种情况,最好选择哪种计时器?
不要使用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();
使用 System.Timers.Timer
。
根据您的间隔,您可以将计时器间隔设置为1秒(或10秒,或1分钟),并每次检查自己的经过时间条件是否已满足。基本上,您正在检查自己是否需要执行某些操作。通过这种方式,您可以在特定的时间段“进入”间隔。
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