转自:
相同点:都是定时执行任务的计时器,都可以使用。
不同点:Timer运行在非UI 线程,如果Timer需要更新UI的时候,需要调用 Invoke或者 BeginInvoke
DispatcherTimer运行在UI 线程,处理的 Dispatcher 队列中的计时器,可以直接更新UI
WPF 应用程序启动时具有两个线程:一个用于处理呈现,另一个用于管理 UI。
呈现线程实际上隐藏在后台运行,而 UI 线程则接收输入、处理事件、绘制屏幕以及运行应用程序代码。 大多数应用程序只使用一个 UI 线程,但在某些情况下,最好使用多个线程。比如大数据量的处理放到后台线程中。
UI 线程在一个名为 Dispatcher 的对象中将工作项进行排队。Dispatcher 根据优先级选择工作项,并运行每一个工作项直到完成。每个 UI 线程都必须至少有一个 Dispatcher,而每个 Dispatcher 都只能在一个线程中执行工作项。
要构建响应速度快、且用户友好的应用程序,诀窍是减小工作项,以最大限度地提高 Dispatcher 吞吐量。 这样,工作项将永远不会因为在 Dispatcher 队列中等待处理而失效。 输入与响应之间的任何可察觉的延迟都会使用户不快。