.net - DispatcherTimer 与 WPF 应用程序中用于任务调度程序的常规 Timer

标签 .net wpf multithreading timer

请解释 @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/

相关文章:

wpf - 如何使用 MVVM 将数据绑定(bind)到 DataGrid 中的 DataGridComboBoxColumn

c++ - 互斥量锁定内存的哪一部分? (线程)

c - 在 Linux 中跟踪 pthreads?

.net - dotfuscator并行优化?

.net - 核心 .NET 运行时中的断点?

c# - WPF 中绑定(bind)的 Markup.IStyle.Connector.Connect 错误

iPhone SDK - 线程触发振动

c# - 从 C++ 创建 .Net Standard 对象

c# - DateTime.Now.Ticks 是如何工作的?

wpf - 使用图像内容为 ToggleButton 设置快捷键