.NET中各种不同的Timer之间区别

System.Timer.Timer

根据命名空间看这个类貌似才是标准的Timer,它提供Interval属性和Elapsed事件。可以每隔一个时间周期触发一次Elapsed事件。在ThreadPool的线程中回调事件处理函数。

该类也提供对UI线程的支持,可能通过将UI元素设置为SynchronizingObject属性(ISynchronizeInvoke类型,因此只能支持WinForm)让Timer将事件转交给SynchronizingObject的创建线程。

由于Elapsed事件的触发源是在ThreadPool,因些如果Elapsed事件的Handler如果执行时间大于Interval设定的值,Elapsed事件的Handler便会出现并发执行的情况。

System.Threading.Timer

和System.Timer.Timer相比,Threading命名空间下的Timer对Elapsed事件的触发同样是在ThreadPool,但是相对来说比较轻量级,没有SynchronizingObject的支持。 同样也有可能出现Handler并发执行的情况。

System.Windows.Threading.DispatcherTimer

这是在WPF中提供的Timer,它的运行环境是在当前的Dispatcher线程,因此可以直接操作当前Dispatcher线程的UI元素。也不会出现Handler并发执行的情况,因为每次对Elapsed的触发会加入到当前Dispatcher线程的队列。然后逐次处理。

原文地址:https://www.cnblogs.com/Code-life/p/3468384.html