【2017年整理】C#中DispatcherTimer VS Timer

上传人:豆浆 文档编号:987667 上传时间:2017-05-24 格式:DOCX 页数:2 大小:15.81KB
返回 下载 相关 举报
【2017年整理】C#中DispatcherTimer VS Timer_第1页
第1页 / 共2页
【2017年整理】C#中DispatcherTimer VS Timer_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《【2017年整理】C#中DispatcherTimer VS Timer》由会员分享,可在线阅读,更多相关《【2017年整理】C#中DispatcherTimer VS Timer(2页珍藏版)》请在金锄头文库上搜索。

1、DispatcherTimer 类集成到按指定时间间隔和指定优先级处理的 Dispatcher 队列中的计时器。 命名空间: System.Windows.Threading 在每个 Dispatcher 循环的顶端重新计算 DispatcherTimer 。 不能保证会正好在时间间隔发生时执行计时器,但能够保证不会在时间间隔发生之前执行计时器。 这是因为 DispatcherTimer 操作与其他操作一样被放置到 Dispatcher 队列中。 何时执行 DispatcherTimer 操作取决于队列中的其他作业及其优先级。 如果 System.Timers. Timer 用于 WPF 应用

2、程序,则值得注意的是 System.Timers. Timer 运行于不同于用户界面 (UI) 线程的其他线程上。 为了访问用户界面 (UI) 线程上的对象,需要使用 Invoke 或 BeginInvoke 将操作发布到用户界面 (UI) 线程的 Dispatcher 上。 使用 DispatcherTimer 而不是使用 System.Timers. Timer 的原因是 DispatcherTimer 与 Dispatcher 运行于相同的线程,并且可以在 DispatcherTimer 上设置 DispatcherPriority 。 每当将对象方法绑定到计时器时,Dispatcher

3、Timer 都将使对象保持活动状态。Timer 类在应用程序中生成定期事件。 命名空间: System.Timers Timer 组件是基于服务器的计时器,它使您能够指定在应用程序中引发 Elapsed 事件的周期性间隔。 然后可通过处理这个事件来提供常规处理。 例如,假设您有一台关键器,必须每周 7 天、每天 24 小时都保持运行。 可以创建一个使用 Timer 的服务,以定期检查服务器并确保系统开启并在运行。如果系统不响应,则该服务可以尝试重新启动服务器或通知管理员。 基于服务器的 Timer 是为在多线程环境中用于辅助线程而设计的。 服务器计时器可以在线程间移动来处理引发的 Elapse

4、d 事件,这样就可以比 Windows 计时器更精确地按时引发事件。 基于 Interval 属性的值,Timer 组件引发 Elapsed 事件。 您可以处理这个事件来执行必要的处理。 例如,假设您有一个联机销售应用程序,它持续向一个数据库投递销售订单。 编译要传送的指令的服务成批处理订单,而不是单独地处理每份订单。 可以使用 Timer 每 30 分钟启动一次批处理。说明当 AutoReset 设置为 false 时,Timer 只在第一个 Interval 过后引发一次 Elapsed 事件。 若要保持以 Interval 时间间隔引发 Elapsed 事件,请将 AutoReset 设

5、置为 true 。在 .NET Framework 2.0 版及更早版本中,Timer 组件捕获 Elapsed 事件的事件处理程序所引发的所有异常并禁止显示这些异常。 在将来的 .NET Framework 版本中,此行为可能会有更改。 Elapsed 事件在 ThreadPool 线程上引发。 如果 Elapsed 事件的处理时间比 Interval 长,在另一个 ThreadPool 线程上将会再次引发此事件。 因此,事件处理程序应当是可重入的。 说明在一个线程调用 Stop 方法或将 Enabled 属性设置为 false 的同时,可在另一个线程上运行事件处理方法。 这可能导致在计时器停止之后引发 Elapsed 事件。 Stop 方法的代码示例演示了一种避免此争用条件的方法。Elapsed 事件可在调用 Dispose 方法后发生,因为计时器将 Elapsed 事件排入队列供线程池线程执行。 设置 SynchronizingObject 属性时,这尤为明显。解决此争用条件的一种方法是:设置一个标志,通知 Elapsed 事件的事件处理程序忽略随后的事件。 如果和用户界面元素(如窗体或控件)一起使用 Timer ,请将包含有 Timer 的窗体或控件赋值给 SynchronizingObject 属性,以便将此事件封送到用户界面线程中。 Timer 在运行时是不可见的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号