定时器
介绍对象主要有以下三个:
- DispatcherTimer
- System.Timers.Timer
- System.Threading.Timer
参考资料主要来自于: - (14条消息) WPF常见的两种定时器_make_888的博客-CSDN博客_wpf 定时器
- (14条消息) WPF下的DispatcherTimer稳定性研究_究竟实相的博客-CSDN博客
DispatcherTimer
DispatcherTimer
定时器可以说是专门为WPF界面设计的定时器,此定时器与UI都在同一个线程
当界面比较简单,UI线程任务轻,推荐在WPF程序中使用这个定时器!
使用方法如下:
- 添加命名控件的引用
using System.Windows.Threading;
- 实例化DispatcherTimer
DispatcherTimer timer = new DispatcherTimer();
- 设置DispatcherTimer参数
timer.Interval = new TimeSpan(0,1,0);//设置的间隔为一分钟
timer.Tick += timer_Tick;//设置定时器溢出触发事件
- DispatcherTimer开始以及停止
//开启定时器
timer.IsEnable = true
timer.Start();
//关闭定时器
timer.IsEnable = false;
timer.Stop();
//注意:经过测试,上述两种开/关定时器操作好像没啥区别,随便用一种方式就行
注意:
DispatcherTimer
好像是默认一直循环执行,不要在溢出触发事件中重新开启- 在界面显示复杂,
UI线程
实时刷新任务重的不适合用DispatcherTimer
,来自于第二个参考资料网站中说明,还没有进行验证。
System.Timers.Timer
C#系统自带的定时器,与UI线程不在同一个线程中
使用方法如下:
- 实例化System.Timers.Timer
System.Timers.Timer timer = new System.Timers.Timer();
- 设置定时器参数
timer.Interval = 60000;//这里设置的间隔时间为1分钟,默认单位是毫秒
//定时器溢出事件
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.AutoReset = true;//设置timer_Elapsed是执行一次(false)还是一直执行(true)
- 定时器开关操作
//开启定时器
timer.IsEnable = true
timer.Start();
//关闭定时器
timer.IsEnable = false;
timer.Stop();
注意:
- 这个定时器在教程中使用时会有报错,但是自己测试时候没有问题,所以还是不太推荐在WPF中使用
System.Threading.Timer
感觉和System.Timers.Timer
差别不是很大,操作上要麻烦一些。和UI也不是在一个线程中。
使用方法如下:
- 实例化System.Threading.Timer
timer = new System.Threading.Timer(
new TimerCallback(Update), null, Timeout.Infinite, Timeout.Infinite);
对构造函数中的参数进行说明:
- new TimerCallback(Update)
定时器溢出回调函数,其中的Update
就是具体执行的函数名
- null
说实话 不知道 基础用法填null
就可以了
- 第一个Timeout,Infinit
定时器开启到第一次调用回调函数的间隔,支持int
类型,单位为毫秒以及TimeSpan
.填Timeout,Infinit
代表永远不启动回调函数。
- 第二个Timeout,Infinit
回调函数与下一次回调函数之间的间隔,支持int
类型,单位为毫秒以及TimeSpan
.填Timeout,Infinit
代表永远不启动下一个回调函数
- 开启与关闭
//开启间隔1s的定时器
timer.Change(1000, 1000);
//关闭定时器
timer.Change(Timeout.Infinite, Timeout.Infinite);
标签:定时器,System,timer,Timer,Timeout,DispatcherTimer
From: https://www.cnblogs.com/DoSomething-Z/p/17056239.html