4种定时器 Timer
2015-12-04 13:33
239 查看
在Framework中存在着4种定时器:其中分为两类,
多线程计时器
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 controls或者WPF这种简单任务来说更方便。
看下在Winform中使用单线程定时器的效果:
//基于Windows消息循环的单线程计时器
private System.Windows.Forms.Timer timer = new Timer() { };
public Form1()
{
InitializeComponent();
timer.Tick += new EventHandler(timer_Tick);
timer.Enabled = true;
}
void timer_Tick(object sender, EventArgs e)
{
//模拟的做一些耗时的操作
System.Threading.Thread.Sleep(2000);
}
如果运行上面的代码,会发现UI界面响应速度很慢,
原理上面已经介绍了:单线程计时器基于Windows消息循环,应用程序会同步的处理计时器的消息。
解决这个问题的方法是使用多线程计时器:只要修改代码使用多线程计时器即可:
//使用多线程计时器
private System.Timers.Timer timer = new System.Timers.Timer();
public Form1()
{
InitializeComponent();
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//模拟的做一些耗时的操作
System.Threading.Thread.Sleep(2000);
}
上面的例子告诉我们单线程计时器的缺点:
除非Tick事件的处理代码执行的非常快,否则UI界面会变得响应很慢。
所以 WPF和Windows Forms的计时器都非常适合小任务,尤其是界面更新的任务。例如时钟和计数显示。否则,你需要一个多线程计时器。
多线程计时器
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 controls或者WPF这种简单任务来说更方便。
看下在Winform中使用单线程定时器的效果:
//基于Windows消息循环的单线程计时器
private System.Windows.Forms.Timer timer = new Timer() { };
public Form1()
{
InitializeComponent();
timer.Tick += new EventHandler(timer_Tick);
timer.Enabled = true;
}
void timer_Tick(object sender, EventArgs e)
{
//模拟的做一些耗时的操作
System.Threading.Thread.Sleep(2000);
}
如果运行上面的代码,会发现UI界面响应速度很慢,
原理上面已经介绍了:单线程计时器基于Windows消息循环,应用程序会同步的处理计时器的消息。
解决这个问题的方法是使用多线程计时器:只要修改代码使用多线程计时器即可:
//使用多线程计时器
private System.Timers.Timer timer = new System.Timers.Timer();
public Form1()
{
InitializeComponent();
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
//模拟的做一些耗时的操作
System.Threading.Thread.Sleep(2000);
}
上面的例子告诉我们单线程计时器的缺点:
除非Tick事件的处理代码执行的非常快,否则UI界面会变得响应很慢。
所以 WPF和Windows Forms的计时器都非常适合小任务,尤其是界面更新的任务。例如时钟和计数显示。否则,你需要一个多线程计时器。
相关文章推荐
- UESTC 764 失落的圣诞节 直接or线段树orRMQ
- 杭电 线段树 (个人整理(基础入门版))(多题练习.)(简单风格)
- 房子
- HTML 之 Embed兼容问题
- C#使用Graphics在窗体上绘图(加滚动条)
- LeetCode解题报告--Search for a Range
- 人生致命的3个经典问题
- 简单工厂模式、工厂模式以及抽象工厂模式
- hive行列转换
- iOS UIViewController 无法关闭自动旋屏(自动旋转、手动旋转、兼容IOS6之前系统)
- Android微信支付彻底扫坑
- HEVC 标准草案
- android学习第一站
- LeetCode(303)Range Sum Query - Immutable
- LeetCode(303)Range Sum Query - Immutable
- 【转】以过来人的身份聊聊实习招聘、秋招、春招(给应届毕业生)
- 自动控制理论的产生和发展-20151121
- 【Linux运维入门】Linux环境安装配置JDK
- Qt Model+View+Delegate
- vs2008统计项目代码量方法