惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - 颜昌钢

怎样做好一个项目经理? ICollection 与 IList 区别 oracle 数据库跨库查询方法 SetTimeOut 与 SetInterval 区别 - 颜昌钢 内存释放 机制 remoting 学习整理 wpf windows 放大缩小 疑问?? - 颜昌钢 GC 资源 回收 WPF中代码画箭头 方法参数 Ref 与 引用类型 DataTrigger 以及 EnterActions 和ExitActions 学习笔记 - 颜昌钢 WPF xaml文件中使用大括号{} - 颜昌钢 - 博客园 WPF下的地图解决方案 关于WPF的Binding 的 ConverterParameter 参数的动态设置 关于 项目 投标相关文档 wpf小控件 集合 仪表盘等 wpf button 事件的触发顺序 - 颜昌钢 c# 插件 体系 一个类似于 splittercontainer 控件的控件
服务器计时器、Windows 计时器和线程计时器
颜昌钢 · 2009-06-23 · via 博客园 - 颜昌钢

2009-06-23日上午的时候,查看同事的wpf程序性,使用了一个dispatcherTimer ,好像自己没有使用过,因此,查看了下msdn的介绍,然后,自己在寻找了下下其他的timer类的相关知识,主要表现在 如下几个timer类:

1:System.Timers命名空间

2:System.Threading命名空间

3:System.Windows.Forms命名空间

如下的文字,全部从msdn帮助文档上截取,放到此处,避免以后查MSDN查不到。。。

ms-help://MS.MSDNQTR.v90.chs/dv_fxradcomp/html/adc0bc0a-a519-4812-bafc-fb9d1a5801fc.htm

服务器计时器、Windows 计时器和线程计时器

Visual Studio 和 .NET Framework 中包含三个计时器控件:

  • 可添加到“工具箱”中的基于服务器的计时器

  • 始终位于“工具箱”中的基于 Windows 的计时器

  • 可通过编程方式使用的线程计时器

基于 Windows 的计时器针对在 Windows 窗体应用程序中使用而进行了优化。基于服务器的计时器是传统的计时器为了在服务器环境上运行而优化后的更新版本。线程计时器是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。

在 Win32 体系结构中有两种类型的线程:UI 线程和辅助线程。UI 线程绝大多数时间处于空闲状态,等待消息循环中的消息到来。一旦接收到消息,它们就进行处理并等待下一个消息到来。另外,辅助线程用来执行后台处理而且不使用消息循环。Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造函数中设置。计时器的设计目的各不相同,它们的线程处理明确地指出了这一点:

  • Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。Windows 计时器的精度限定为 55 毫秒。这些传统计时器要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。对于 COM 组件来说,这样会降低性能。

  • 基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的。由于它们使用不同的体系结构,因此基于服务器的计时器可能比 Windows 计时器精确得多。服务器计时器可以在线程之间移动来处理引发的事件。

  • 对消息不在线程上发送的方案中,线程计时器是非常有用的。例如,基于 Windows 的计时器依赖于操作系统计时器的支持,如果不在线程上发送消息,与计时器相关的事件将不会发生。在这种情况下,线程计时器就非常有用。

Windows 计时器位于 System.Windows.Forms 命名空间中,服务器计时器 System.Timers 命名空间中,线程计时器位于 System.Threading 命名空间中。

留一些问题在这个地方,希望如果看到本文章的各位,能够帮忙回答下:

1:DispatcherTimer算不算这样的Timer???????或者说,使用了如上的那个Timer? ????? System.Windows.Forms.Timer?????或者,就是System.Windows.Forms.Timer的WPF实现?

2:如下的代码:

            System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
            dispatcherTimer.Start();

 private void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            Lables.Content = "111";
            System.Threading.Thread.Sleep(5 * 60 * 1000);//模拟长时间的操作。。。
          }

如上红色的地方,虽然在 dispatcherTimer_Tick 函数里面,我们不一定必须使用Dispatcher.Invoke等等的形式来对Lables的调用,但是,如上的代码,还是会引起界面线程的挂起,呵呵。。所以,对于使用 计时器来间隔执行程序的时候,如果花费的时间长,还不如去使用System.Timers.Timer以及配合Dispatcher.Invoke..........来对界面的访问(当然,还要用到异步操作。。)