[英]Which C# Timer?
我正在编写一个包含计时器的类(至关重要的是,该计时器可能未初始化为0,它可能已经开始运行),并且该类将包含Start,Pause,Resume和Stop / Complete的方法。 我知道我可以使用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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.