知识大全 .Net框架类库中定时器类的使用[1]

Posted

篇首语:有些人不管变得多么衰老,却从不失去他们的美丽本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .Net框架类库中定时器类的使用[1]相关的知识,希望对你有一定的参考价值。

技巧:.Net框架类库中定时器类的使用[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  不论在客户端应用程序还是服务器组件(包括窗口服务)定时器通常扮演一个重要的角色 写一个高效的定时器驱动型可管理代码要求对程序流程有一个清晰的理解及掌握 NET线程模型的精妙之处 NET框架类库提供了三种不同的定时器类 System Windows Forms Timer System Timers Timer 和System Threading Timer 每个类为不同的场合进行设计和优化 本文章将研究这三个类并让你理解如何及何时应该使用哪一个类

  Microsoft? Windows?里的定时器对象当行为发生时允许你进行控制 定时器一些最常用的地方就是有规律的定时启动一个进程 在事件之间设置间隔 及当进行 图形工作时维护固定的动画速度(而不管处理函数的速度) 在过去 对于使用Visual Basic?的开发者来说 定时器甚至用来模拟多任务

  正如你所期望的那样 对于你需要应对的不同场合微软为你装备了一些工具 在 NET框架类库中有三种不同的定时器类 System Windows Forms Timer System Timers Timer 和System Threading Timer 头两个类出现在Visual Studio? NET的工具箱窗口 这两个定时器控件都允许你直接把它们拖拽到Windows窗体设计器或组件类设计器上 如果你不小心 这就是麻烦的开始

  Visual Studio NET工具箱上的Windows窗体页和组件页(见Figure )都有定时器控件 非常容易的错误地使用它们当中的一个 或者更糟糕的是 根本意识不到它们的不同 仅当目标是Windows窗体设计器时才使用Windows窗体页上的定时器控件 这个控件将在你的窗体上放置一个Systems Windows Forms Timer类的实例 像工具箱上的其它控件一样 你可以让Visual Studio NET处理其生成或者你自己手动的实例和初始化这个类

  Figure 定时器控件

  在组件页上的定时器控件可以被安全的用在任何类中 这个控件创建了一个System Timers Timer类的实例 如果你正在使用Visual Studio NET工具箱 无论是Windows窗体设计器还是组件类设计器你都可以安全的使用这个类 在Visual Studio NET中当你设计一个派生于System ComponentModel Component的类时使用组件类设计器 System Threading Timer类不出现在Visual Studio NET工具箱窗口上 它稍微有点复杂但提供了一个更高级别的控件 稍后你会在本文章中看到

  Figure 例子程序

  让我们首先研究System Windows Forms Timer和System Timers Timer类 这两个类有着非常相似的对象模型 稍后我将探索更加高级的System Threading Timer类 Figure 是我将在整个文章引用的例子程序的一个屏幕快照 这个应用程序将会让你获得对这几个定时器类的清晰的理解 你可以从本文章的开始链接处下载完整的代码并试验它

  System Windows Forms Timer

  如果你在找一个节拍器 你已经走错了地方了 这个定时器类引发的定时器事件是同你的窗口应用程序的其余代码相同步的 这意味着正在执行的代码从来不会被这个定时器类的实例所抢占(假设你不调用Application DoEvents) 就像一个典型窗体程序里的其它代码一样 任何驻留在一个定时器事件处理函数(指的是该类型的定时器类)中的代码也是使用应用程序的UI线程所执行 在空闲时候 该UI线程同样要对应用程序的窗体消息队列中的所有消息进行负责 这不仅包括由这个定时类引发的消息 也包括窗体API消息 无论何时你的程序不忙于做其它事情时该UI线程就处理这些消息

  在Visual Studio NET之前如果你写过Visual Basic代码 你可能知道在一个窗口应用程序里当正在执行一个事件处理函数时让你的UI线程去响应其它窗体消息的唯一方法就是调用Application DoEvents方法 就像Visual Basic一样 从 NET框架中调用Application DoEvents能够产生许多问题 Application DoEvents产生了对UI消息泵的控制 让你对所有未处理的事件进行处理 这能够改变我刚才提到的所期望的执行路径 如果为了处理由该定时器类产生的定时器事件而在你的代码中有一个Application DoEvents的调用 你的程序流程可能会被打断 这会产生不希望的行为并使调试困难

运行例子程序就会使这个定时器类的行为变得清楚 单击程序的Start按钮 接着单击Sleep按钮 最后单击Stop按钮 将会产生下面的输出结果

  System Windows Forms Timer Started @ : : PM > Timer Event @ : : PM on Thread UIThread > Timer EVENT @ : : PM on Thread: UIThread > Timer Event @ : : PM on Thread: UIThreadSleeping for ms > Timer Event @ : : PM on Thread: UIThreadSystem Windows Forms Timer Stopped @ : : PM

  例子程序设置System Windows Forms Timer类的间隔属性为 毫秒 正如你所看到的 当UI线程正在睡眠( 秒)期间如果定时器事件处理函数仍然继续捕捉定时器事件的话 当睡眠线程再次被唤醒的时候应该有 个定时器事件被显示——在UI线程睡眠时每秒钟一个 然而 当UI线程在睡眠时定时器却保持挂起状态

cha138/Article/program/net/201311/15306

相关参考

知识大全 .Net框架类库中定时器类的使用[3]

技巧:.Net框架类库中定时器类的使用[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不像

知识大全 .Net框架类库中定时器类的使用[4]

技巧:.Net框架类库中定时器类的使用[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Sh

知识大全 .Net框架类库中定时器类的使用[2]

技巧:.Net框架类库中定时器类的使用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对S

知识大全 .net知识结构

  NET介绍微软NET战略及技术体系NETFramework框架类库(FCL)公共语言运行时(CLR)通用类型系统(CTS)公共语言规范(CLS)程序集(Assembly)应用程序域(Applica

知识大全 从.NET类库代码来看ASP.NET运行时[1]

从.NET类库代码来看ASP.NET运行时[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 用反射调用任意.net库中的方法

注:ReturnMessage是我自写的一个类作用请查看我的其他文章我也把这个类一并附在后面通过NameSpaceAndClassName和MethodName实际上就可以精确定位一个方法了如调用ab

知识大全 在开发中.net类库中发送电子邮件[1]

  发送电子邮件是许多需要用户注册的网站的通用功能通过正则表达式我们可以过滤掉不符合电子邮件格式的输入但是仍没有办法确保用户填写的电子邮件地址一定是他本人真实有效的电子邮件地址通常验证电子邮件真实有效

知识大全 从.NET类库代码来看ASP.NET运行时[2]

从.NET类库代码来看ASP.NET运行时[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 ASP.NET上的ReCAPTCHA类库

ASP.NET上的ReCAPTCHA类库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  reCA

知识大全 ADO.NET的一个帮助类库

ADO.NET的一个帮助类库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONET的一个帮