WPF中Timer与DispatcherTimer类的区别

前几天在WPF中写了一个轨迹回放的功能,我想稍微做过类似项目的,都晓得采用一个时间控件或者时间对象作为调度器,我在这么做的时候,出现了问题,于是将程序中的Timer换成了DispatchTimer,然后就可以了,特意在网上找了下这两者的区别,看到一篇比较详细的,并且有代码的博文,我就直接引用了,原文地址:http://www.cnblogs.com/zhchbin/archive/2012/03/06/2381693.html,我只附加上原文的代码。

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Timers; namespace TimerTest { /// <summary>

/// Interaction logic for MainWindow.xaml /// </summary>

    public partial class MainWindow : Window { private Timer aTimer = null; public MainWindow() { InitializeComponent(); aTimer = new Timer(); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); // Set the Interval to 5 seconds.

            aTimer.Interval = 1000; aTimer.Enabled = true; aTimer.Start(); } private void OnTimedEvent(object source, ElapsedEventArgs e) { timeLabel.Content = DateTime.Now.ToUniversalTime(); } } }

 

 

using System; using System.Windows; using System.Timers; using System.Windows.Threading; namespace TimerTest { /// <summary>

/// Interaction logic for MainWindow.xaml /// </summary>

    public partial class MainWindow : Window { private Timer aTimer = null; private delegate void TimerDispatcherDelegate(); public MainWindow() { InitializeComponent(); aTimer = new Timer(1000); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); aTimer.Interval = 1000; aTimer.Enabled = true; } private void OnTimedEvent(object sender, EventArgs e) { this.Dispatcher.Invoke(DispatcherPriority.Normal, new TimerDispatcherDelegate(updateUI)); } private void updateUI() { timeLabel.Content = DateTime.Now.ToUniversalTime(); } } }

通过这些,我想到,其实多线程访问UI的都是相通的,在Winform中为了更新UI,我们都会有带有Invoke或者委托来实现,而Timer要用来更新,主要看这个Timer是否多线程的。

你可能感兴趣的:(dispatcher)