System.Windows.Forms.Timer

一、主要属性、方法和事件

  Windows 窗体 Timer 是定期引发事件的组件。该组件是为 Windows 窗体环境设计的。

  时间间隔的长度由 Interval 属性定义,其值以毫秒为单位。若启用了该组件,则每个时间间隔引发一个 Tick 事件。

  这是添加要执行的代码的位置。

  Timer 组件的主要方法包括 Start 和Stop,这两种方法可打开和关闭计时器。计时器在关闭时重置;不存在暂停 Timer 组件的方法

二、Windows 窗体 Timer 组件的 Interval 属性的限制

  Windows 窗体 Timer 组件具有一个 Interval 属性,该属性指定一个计时器事件与下一个计时器事件之间间隔的毫秒数。

  除非该组件被禁用,否则计时器会以大致相等的时间间隔继续接收 Tick 事件

  Interval 属性:当编写 Timer 组件时,需要考虑 Interval 属性的几点限制:

  • 如果应用程序或另一个应用程序对系统需求很大(如长循环、大量的计算或驱动程序、网络或端口访问),那么应用程序可能无法以 Interval 属性指定的频率来获取计时器事件。

  • 间隔可以在 1 和 64,767 之间(包括 1 和 64,767),这意味着即使最长的间隔(大约 64.8 秒)也不会超过一分钟很多。

  • 不能保证间隔所精确经过的时间。若要确保精确,计时器应根据需要检查系统时钟,而不是尝试在内部跟踪所积累的时间。

  • 系统每秒生成 18 个时钟刻度,因此即使 Interval 属性以毫秒为单位,间隔的实际精度也不会超过十八分之一秒。

  • System.Windows.Forms.Timer 类提供有关 Timer 类(用于 Windows 窗体计时器)及其成员的参考信息
三、使用 Windows 窗体计时器组件以设置的间隔运行过程
  有时您可能想创建一个过程,使其以特定时间间隔运行直至一个循环完成,或者使其在经过所设置的时间间隔后运行。Timer 组件使这种过程成为可能。
  1、在窗体中添加 Timer
  2、为计时器设置 Interval 属性(以毫秒为单位)。该属性决定在再次运行该过程之前所经过的时间。
    注意:计时器事件发生越频繁,用于响应该事件的处理器时间就越长。这会降低整体性能。请勿将间隔设置得比所需值小。
  3、在 Tick 事件处理程序内编写合适的代码。在该事件中编写的代码将以 Interval 属性中所指定的间隔运行。
  4、将 Enabled 属性设置为 true,以启动计时器。Tick 事件将开始发生,从而以设置的间隔运行过程。
  5、合适的时候,将 Enabled 属性设置为 false,以使过程停止再次运行。将间隔设置为 0,并不会导致计时器停止。
四、示例
  1、第一个代码示例以一秒为增量单位跟踪每天的时间。
  它在窗体中使用了 ButtonLabel 和 Timer 组件。将 Interval 属性设置为 1000(等于一秒钟)。
  在 Tick 事件中,将标签的标题设置为当前时间。
  当单击按钮时,Enabled 属性将设置为 false,以使计时器停止更新标签的标题。
  下面的代码示例要求您拥有一个窗体,该窗体具有一个名为 Button1 的 Button 控件、一个名为 Timer1 的 Timer 控件和一个名为 Label1 的 Label 控件。
  
 1 private void InitializeTimer()
 2 {
 3    //' Run this procedure in an appropriate event.
 4    // Set to 1 second.
 5    Timer1.Interval = 1000;
 6    // Enable timer.
 7    Timer1.Enabled = true;
 8    Button1.Text = "Stop";
 9 }
10 
11 private void Timer1_Tick(object Sender, EventArgs e)   
12 {
13    // Set the caption to the current time.
14    Label1.Text = DateTime.Now.ToString();
15 }
16 
17 private void Button1_Click()
18 {
19   if ( Button1.Text == "Stop" )
20   {
21     Button1.Text = "Start";
22     Timer1.Enabled = false;
23   }
24   else
25   {
26     Button1.Text = "Stop";
27     Timer1.Enabled = true;
28   }
29 }

  2、第二个代码示例每隔 600 毫秒运行一次过程,直到循环完成时为止。

  下面的代码示例要求您拥有一个窗体,该窗体具有一个名为 Button1 的 Button 控件、一个名为 Timer1 的 Timer 控件和一个名为 Label1 的 Label 控件。

 1 // This variable will be the loop counter.
 2 private int counter;
 3 
 4 private void InitializeTimer()
 5 {
 6    // Run this procedure in an appropriate event.
 7    counter = 0;
 8    timer1.Interval = 600;
 9    timer1.Enabled = true;
10    // Hook up timer's tick event handler.
11    this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
12 }
13 
14 private void timer1_Tick(object sender, System.EventArgs e)   
15 {
16    if (counter >= 10) 
17    {
18       // Exit loop code.
19       timer1.Enabled = false;
20       counter = 0;
21    }
22    else
23    {
24       // Run your procedure here.
25       // Increment counter.
26       counter = counter + 1;
27       label1.Text = "Procedures Run: " + counter.ToString();
28       }
29 }

详细信息查看:http://msdn.microsoft.com/zh-cn/library/beza71x7(v=vs.80).aspx

人生,总是有一些空城旧事,年华未央;总是有些季节,一季花凉,满地忧伤。许多事,看开了,便会峰回路转;许多梦,看淡了,便会云开日出。学会思索,学会珍藏,微笑领悟,默默坚强。
原文地址:https://www.cnblogs.com/yuzhou133/p/4139211.html