哪个C#计时器?
我正在写一个包含一个计时器的类(关键时刻可能不会在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.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
使用System.Timers.Timer
。
根据您的间隔,您可以将定时器间隔设置为1秒(或10或1分钟),并且每次检查您自己的经过条件是否通过。 基本上你是在检查自己是否需要做某事。 这样,你可以开始一段时间’进入’间隔。
- VS2012安装后System.Uri.ToString行为更改
- 是否有一个示例为什么应该在NHibernate中覆盖Equals / GetHashCode?
- EF7(Core)中同一个表的多个关系
- 为什么Entity Framework Code-First(使用现有数据库)继续尝试从EdmMetadata表中获取数据?
- 在asp.net中更改gridview的自动生成选择列的文本 – 如何?
- 针对后台工作者的Web应用程序的Nhibernate会话管理策略?
- 将JavaScript日期转换为.NET日期的最佳方式
- 当服务器返回错误时,使用WebClient访问响应主体的任何方法?
- RX AutoCompleteBox