时间:2021-05-21
在.NET FrameWork中有多个Timer,那么怎么根据实际情况进行选择确实是一个问题。
总体而言,计时器共有以下四种:
多线程计时器:
1 System.Threading.Timer
2 System.Timers.Timer
特殊环境的单线程计时器:
1 System.Windows.Forms.Timer(使用环境:Windows Forms Timer)
2 System.Windows.Threading.DispatcherTimer( 使用环境:WPF timer);
单线程计时器比较安全, 因为运行在主线程中,对于更新 Windows Forms或者WPF 中控件的值 这种简单任务来说更方便。 例如时钟和计数显示。否则,你需要一个多线程计时器。
原理:单线程使用消息循环机制,这意味着Tick事件总是在创建timer的那个线程上执行,同时也意味着如果上一个Tick消息还未被处理,即使时间超过了间隔时间,在消息循环中也只存在一个Tick消息。
示例代码如下:
public static void Main(){System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();tmr.Tick += new EventHandler(tmr_Tick);tmr.Start();//开始计时器tmr.Stop();//停止计时器tmr.Enabled =true;//设置或获取计时器是否正在运行tmr.Interval = 10000; //计时器的时间间隔 (10秒),以毫秒为单位,在计时器事件tmr_Tick开始10秒后进行第一次执行.}void tmr_Tick(object sender, EventArgs e){ //到达指定时间间隔应处理的代码}当tmr_Tick执行时间较长,UI界面会卡顿,如下图所示:
多线程计时器比较强大,精确,而且可扩展性强;使用多线程计时器时不会对主线程造成任何影响,也就不会出现上面图片显示的情况.
原理:多线程计时器使用回调方法并由线程池线程提供服务.当计时器间隔小于执行此回调(Tick方法)所需的时间时,回调可以同时在多个线程中执行,比如当计时器的时间间隔是5秒,但过了5秒后,上一次的回调仍未完成,此时新的回调将在新的线程中运行.在开发中需要避免此种情况。
System.Threading.Timer是最简单的多线程计时器。
只要在使用 System.Threading.Timer,就必须保留对它的引用。对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。即使 Timer 仍处在活动状态,也会被回收。
在下面的例子中,计时器在5秒后开始定时1秒的调用Tick方法。
.net framework提供的另一个计时器System.Timers.Timer.简单的对System.Threading.Timer进行了包装。增加了下面几个特性:
1.实现了Component,所以可以在设计器显示。
2.用Interval属性代替代替Change方法
3.添加了Elapsed事件, 启动和停止timer的Start和Stop方法。
4.添加了AutoReset属性 默认为True 来指定是否在每次指定的间隔结束时引发Elapsed事件,还是仅运行一次Elapsed事件就结束
示例代码如下:
结论:
WPF和Windows Forms的单线程计时器都非常适合小任务,尤其是界面更新的任务。例如时钟和计数显示。
否则,你只能使用多线程计时器,对于使用哪一种多线程计时器,可根据自己的需要来决定
希望本文所述对大家掌握.net中timer的用法有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
MySQL数据类型中DECIMAL的用法实例详解在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下
本文实例讲述了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,分享给大家供大家参考。具体分析如下:在.NETF
.NETFramework中为我们提供了3种类型的Timer,分别是:ServerTimer(System.Timers.Timer),ThreadTimer(
C#中timer类的用法关于C#中timer类在C#里关于定时器类就有3个1.定义在System.Windows.Forms里2.定义在System.Threa
本文实例讲述了asp.net中Timer无刷新定时器的实现方法。Timer控件要实现无刷新,得用到ajax技术,这里使用VS2008自带的ajax技术。首先得添