我正在编写一个包含一个计时器的类(它可能不会在0处初始化,它可能已经开始运行),并且该类将包括启动,暂停,恢复和停止/完成的方法。我知道我可以使用C#中的一些定时器,即System.Timers.Timer,但是我不确定这个定时器是否允许我以预定义的经过时间的数字启动定时器。
这种情况最好的是什么?
答案 0 :(得分:3)
不要使用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();
答案 1 :(得分:0)
使用System.Timers.Timer
。
根据您的间隔,您可以将定时器间隔设置为1秒(或10或1分钟),并每次检查您自己的经过条件是否通过。基本上你是在检查自己是否需要做某事。这样,你可以开始一段时间'进入'间隔。
答案 2 :(得分:0)
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