Timer组件是基于服务器的计时器,通过设置时间间隔Interval,周期性的触发Elapsed事件。
用法如下:
class Program {static System.Timers.Timer Timer1 = new System.Timers.Timer();static void Main() { Timer1.Interval = 1000; Timer1.Elapsed += new ElapsedEventHandler(PeriodicTaskHandler); Timer1.Start(); Console.ReadLine(); } static void PeriodicTaskHandler(object sender, ElapsedEventArgs e) {string str =Thread.CurrentThread.ManagedThreadId.ToString()+"##" +"Timer1" +"##" + e.SignalTime.ToLongTimeString(); Console.WriteLine(str); } }
DispatcherTimer:Dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。这是因为 DispatcherTimer的操作也是放置在Dispatcher队列中的,何时执行DispatcherTimer操作取决于队列中其他作业及其优先级。
在WPF应用程序中
Timer的Elapsed事件绑定的方法没有运行在UI线程上,如果要访问UI线程上的对象,需要利用Invoke或BeginInvoke 将操作发布到UI线程的Dispatcher上。
用法如下
private void Button_Click(object sender, RoutedEventArgs e) { Timer timer = new Timer(); timer.Interval = 1000; timer.Start(); timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); } void timer_Elapsed(object sender, ElapsedEventArgs e) { i++;this.Dispatcher.Invoke(new Action(() => { test.Content = i.ToString(); })); } private int i = 0;
DispatcherTimer与Dispatcher都运行于相同的线程,并且可以在DispatcherTimer上设置DispatcherPriority。
用法
private void Button_Click(object sender, RoutedEventArgs e) { timer.Interval = TimeSpan.FromMilliseconds(1000); timer.Tick += new EventHandler(timer_Tick); timer.Start(); } void timer_Tick(object sender, EventArgs e) { i++; Test.Content = i.ToString(); } private int i = 0;private DispatcherTimer timer = new DispatcherTimer();
详细代码:DownLoad
作者:绿茶叶
出处:http://www.cnblogs.com/greenteaone/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载:http://www.cnblogs.com/greenteaone/archive/2012/01/05/2313107.html
时间: 2024-11-06 08:09:53