请解释 @Kent Boogaart 用于在多线程 WPF 应用程序中用作本主题中的任务调度程序的“DispatcherTimer”和“常规计时器”之间的区别:
Advice needed for multi-threading strategy for WPF application
在对其中一篇文章的评论中(引用):
- 如果 DispatcherTimer 所做的只是启动另一个线程,那么使用 DispatcherTimer 的意义何在?
....那些线程不需要在 UI 线程上启动。您可以只使用常规 Timer 并避免完全中断 UI
什么是“常规计时器”?它们(“DispatcherTimer”和“常规定时器”)对 UI 的影响有何不同?
(在阅读这篇文章之前,我认为 DispatcherTimer 是在 WPF 中使用计时器的一种自然方式。如果这不是真的,会发生什么情况?)
最佳答案
DispatcherTimer 是常规计时器。它在 UI 线程上触发它的 Tick 事件,你可以对 UI 做任何你想做的事情。 System.Timers.Timer 是一个异步定时器,它的 Elapsed 事件在线程池线程上运行。您在事件处理程序中必须非常小心,不允许触摸任何 UI 组件或数据绑定(bind)变量。并且您需要在访问也用于 UI 线程的类成员时使用 lock 语句。
在链接的答案中, Timer 类更合适,因为 OP 试图故意异步运行代码。
关于.net - DispatcherTimer 与 WPF 应用程序中用于任务调度程序的常规 Timer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258830/