WPF和Silverlight程序中DispatcherTimer与Timer的区别

转自:http://www.cnblogs.com/brucelee521/archive/2011/05/27/2059692.html

 

相同点:都是定时执行任务的计时器,都可以使用。

不同点:Timer运行在非UI 线程,如果Timer需要更新UI的时候,需要调用 Invoke或者 BeginInvoke

DispatcherTimer运行在UI 线程,处理的 Dispatcher 队列中的计时器,可以直接更新UI

WPF 应用程序启动时具有两个线程:一个用于处理呈现,另一个用于管理 UI。

呈现线程实际上隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。 大多数应用程序只使用一个 UI 线程,但在某些情况下,最好使用多个线程。比如大数据量的处理放到后台线程中。

UI 线程在一个名为 Dispatcher 的对象中将工作项进行排队。Dispatcher 根据优先级选择工作项,并运行每一个工作项直到完成。每个 UI 线程都必须至少有一个 Dispatcher,而每个 Dispatcher 都只能在一个线程中执行工作项。

要构建响应速度快、且用户友好的应用程序,诀窍是减小工作项,以最大限度地提高 Dispatcher 吞吐量。 这样,工作项将永远不会因为在 Dispatcher 队列中等待处理而失效。 输入与响应之间的任何可察觉的延迟都会使用户不快。

posted @ 2011-12-08 09:38  jeekun  阅读(261)  评论(0编辑  收藏  举报