WPF下的DispatcherTimer研究

本文探讨了在WPF应用程序中,DispatcherTimer在UI线程上运行时遇到的不稳定性问题。当UI界面元素复杂时,DispatcherTimer的定时更新表现不佳,与性能、硬件模块或软件功能无关。解决方案是改用System.Threading.Timer以确保定时任务的稳定执行。

WPF下的DispatcherTimer稳定性研究

(转载请注明作者和出处)

一、问题的提出

    在WPF桌面程序中,要用到定时器,微软给我们提供了多种选择,其中两种是System.Windows.Threading.DispatcherTimer(下面简称DispatcherTimer)和System.Threading.Timer(下面简称Timer),其他的就不在这里叙述了。

二者区别在于,DispatcherTimer是运行在UI线程上的,最大的好处是可以在定时事件中修改UI元素,Timer是运行在独立的线程上的,与UI线程无关,如果需要修改UI控件,则必须委托给调度器this.Dispatcher进行。

刚刚建立WPF工程时,使用了DispatcherTimer,定时周期为1秒,在界面上显示格式为HH:mm:ss的时间,效果良好,间隔均匀稳定。

后来,在WPF工程中,添加了很多模块,如UI界面元素、通信模块等,特别是很多硬件控制模块,每个硬件模块都可能有一个单独的线程。

突然,前天发现,UI界面上的时钟HH:mm:ss显示不均匀、不稳定了,有时候3秒钟才更新时钟显示。苦思良久,未得要领。

 

二、原因查找

2.1 性能怀疑

我怀疑是当前电脑性能太弱,难以支撑越来越庞大的软件。当前电脑的配置为CPU J1900,内存DDR3 4G,固态硬盘128G。于是,把程序移植到另一台强大很多的电脑,配置为CPU i7 四代,内存8G DDR3,固态硬盘120G,加1T机械硬盘。两台电脑的操作系统是一样的。

结果,问题依然存在。

2.2 怀疑过多的硬件模块

花了半天功夫,注释掉所有的硬件模块代码,好不容易让程序能跑起来。

结果,问题依然存在。

2.3 怀疑过多的软件功能模块。

花了半天功夫,注释掉所有的软件模块代码,好不容易让程序能跑起来。

结果,问题依然存在。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值