做过WinForm开发的都会郁闷WPF竟然没有Timer。
今天想在WPF中用Timer可是发现WPF没有Timer类,找了半天发现新增了一个 DispatcherTimer确实好用和WinForm中Timer用法相似。
—————————————————————————————————————————--
引:银光中国
在 WPF 中不再有类似 WinForm 中的 Timer 控件,因此,需要使用 DispatcherTimer 类来实现类似 Timer 的定时执行事件,该事件使用委托方式实现。DispatcherTimer 类 在 System.Windows.Threading 下,需要 using System.Windows.Threading 命名空间。
MSDN事例:
创建了名为 dispatcherTimer 的 DispatcherTimer 对象。 事件处理程序 dispatcherTimer_Tick 被添加到 dispatcherTimer 的 Tick 事件中。 使用 TimeSpan 对象将 Interval 设置为 1 秒,并启动了计时器。
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// DispatcherTimer setup</span><span> </span></span></li><li><span>dispatcherTimer = <span class="keyword">new</span><span> System.Windows.Threading.DispatcherTimer(); </span></span></li><li class="alt"><span>dispatcherTimer.Tick += <span class="keyword">new</span><span> EventHandler(dispatcherTimer_Tick); </span></span></li><li><span>dispatcherTimer.Interval = <span class="keyword">new</span><span> TimeSpan(0,0,1); </span></span></li><li class="alt"><span>dispatcherTimer.Start(); </span></li></ol> |
Tick 事件处理程序将更新显示当前秒数的 Label,并且它将对 CommandManager 调用 InvalidateRequerySuggested。
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// System.Windows.Threading.DispatcherTimer.Tick handler</span><span> </span></span></li><li><span> <span class="comment">//</span><span> </span></span></li><li class="alt"><span> <span class="comment">// Updates the current seconds display and calls</span><span> </span></span></li><li><span> <span class="comment">// InvalidateRequerySuggested on the CommandManager to force </span><span> </span></span></li><li class="alt"><span> <span class="comment">// the Command to raise the CanExecuteChanged event.</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">void</span><span> dispatcherTimer_Tick(</span><span class="keyword">object</span><span> sender, EventArgs e) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="comment">// Updating the Label which displays the current second</span><span> </span></span></li><li class="alt"><span> lblSeconds.Content = DateTime.Now.Second; </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">// Forcing the CommandManager to raise the RequerySuggested event</span><span> </span></span></li><li><span> CommandManager.InvalidateRequerySuggested(); </span></li><li class="alt"><span> } </span></li></ol> |
转自:http://www.cnblogs.com/midcn/archive/2011/03/18/1987928.html