博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

C# Timer范例教程

Posted on 2008-05-23 13:48  codingsilence  阅读(11530)  评论(0编辑  收藏  举报
这是一个关于Timer的例子,我们将创建一个简单的应用程序,使用Timer对象来倒计时一个由自己设定的时间并循环播放一段音乐,直到重设Timer控件。

 

Timer对象基础

        首先你要知道的是,使用Timer对象你需要访问如下命名空间:

        using System.Threading;
        using System.Timers;

        接下来,介绍一下创建一个Timer的要点以及为这个timer对象的Elapsed事件设定事件委派。
        先创建一个Timer对象,这里定义使用的timer为timerClock。接下来设定Elapsed事件委派,当事件被触发时,指定的委派将被调用,这里定义使用的委派名称为OnTimer()。
        接着,设定Interval属性,使用毫秒数值指示希望Elapsed事件被调用的间隔,这意味着,当定义Interval属性为1000毫秒时,定义的委派OnTimer()将每隔1000毫秒被调用一次,或者说是每隔1秒。
        最后,需要设定Enabled属性为true,以使这个timer对象开始工作。接下来,剩下的只是一个小问题—创建一个委派,在这个timer对象的Elapsed属性被触发时调用。如果以前没有使用过委派,不用担心,它们很容易使用,只需要创建一个方法,用来接收适合你捕获事件的一些变量。
        针对Elapsed事件,这个委派需要接收一个普通对象和一个ElapsedEventArgs对象。

private System.Timers.Timer timerClock = new System.Timers.Timer();   
timerClock.Elapsed += new ElapsedEventHandler(OnTimer);
timerClock.Interval = 1000;
timerClock.Enabled = true;

 

public void OnTimer( Object source, ElapsedEventArgs e )
{
    //Your code here
}

 

在报警程序中使用Timer控件

        介绍了这些基础,现在来看在实际应用中的代码。注意,这里并不包括播放音乐和显示最小化图标的代码。
        在下面的代码中,可以看到,将实例化Timer对象的方法放在初始化方法InitializeTimer()中,这个方法将被类构造调用。并且创建了两个方法,inputToSeconds()和secondsToTime()用来将字符串格式的时间格式转换为正型,以及一个反处理过程。这些方法只是用来帮助我们在TextBox控件中显示日期格式,这在整个应用的结构中,并不十分重要。其他的那些代码,是标准的Visual Studio.NET为Win Form程序生成的样板文件。

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;
using System.Timers;
using System.IO;
using System.Reflection;

 

namespace timerAlarm
{
    public class TimerForm : System.Windows.Forms.Form
    {
        //Controls and Components
        private System.Windows.Forms.TextBox timerInput;
        private System.Windows.Forms.Button StartButton;
        private System.Windows.Forms.Button ResetButton;
        private System.ComponentModel.IContainer components;
        //Timer and associated variables
        private System.Timers.Timer timerClock = new System.Timers.Timer();
        private int clockTime = 0;
        private int alarmTime = 0;

 

        public TimerForm()
        {
            InitializeComponent();
            InitializeTimer();
        }

 

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

 

        #region Windows Form Designer generated code
       #endregion

 

        public void InitializeTimer()
        {
            this.timerClock.Elapsed += new ElapsedEventHandler(OnTimer);
            this.timerClock.Interval = 1000;
            this.timerClock.Enabled = true;
        }

 

        [STAThread]
        static void Main()
        {
            Application.Run(new TimerForm());
        }

 

        private void TimerForm_Resized(object sender, System.EventArgs e)
        {
            if( this.WindowState == FormWindowState.Minimized )
            {
                this.Hide();
            }
        }

 

        private void StartButton_Click(object sender, System.EventArgs e)
        {
            this.clockTime = 0;
            inputToSeconds( this.timerInput.Text );
        }

 

        private void ResetButton_Click(object sender, System.EventArgs e)
        {
            try
            {
                this.clockTime = 0;
                this.alarmTime = 0;
                this.timerInput.Text = "00:00:00";
            }
            catch( Exception ex )
            {
                MessageBox.Show("ResetButton_Click(): " + ex.Message );
            }
        }

 

        public void OnTimer(Object source, ElapsedEventArgs e)
        {
            try
            {
                this.clockTime++;
                int countdown = this.alarmTime - this.clockTime ;
                if( this.alarmTime != 0 )
                {
                    this.timerInput.Text = secondsToTime(countdown);
                }

 

                //Sound Alarm
                if( this.clockTime == this.alarmTime )
                {
                    MessageBox.Show("Play Sound");
                }
            }
            catch( Exception ex )
            {
                MessageBox.Show("OnTimer(): " + ex.Message );
            }       
        }

 

        private void inputToSeconds( string timerInput )
        {
            try
            {
                string[] timeArray = new string[3];
                int minutes = 0;
                int hours = 0;
                int seconds = 0;
                int occurence = 0;
                int length = 0;

 

                occurence = timerInput.LastIndexOf(":");
                length = timerInput.Length;

 

                //Check for invalid input
                if( occurence == -1 || length != 8 )
                {
                    MessageBox.Show("Invalid Time Format.");
                    ResetButton_Click( null, null );
                }
                else
                {
                    timeArray = timerInput.Split(':');

 

                    seconds = Convert.ToInt32( timeArray[2] );
                    minutes = Convert.ToInt32( timeArray[1] );
                    hours = Convert.ToInt32( timeArray[0] );

 

                    this.alarmTime += seconds;
                    this.alarmTime += minutes*60;
                    this.alarmTime += (hours*60)*60;
                }
            }
            catch( Exception e )
            {
                MessageBox.Show("inputToSeconds(): " + e.Message );
            }
        }

 

        public string secondsToTime( int seconds )
        {
            int minutes = 0;
            int hours = 0;

 

            while( seconds >= 60 )
            {
                minutes += 1;
                seconds -= 60;
            }
            while( minutes >= 60 )
            {
                hours += 1;
                minutes -= 60;
            }

 

            string strHours = hours.ToString();
            string strMinutes = minutes.ToString();
            string strSeconds = seconds.ToString();

 

            if( strHours.Length < 2 )
                strHours = "0" + strHours;
            if( strMinutes.Length < 2 )
                strMinutes = "0" + strMinutes;
            if( strSeconds.Length < 2 )
                strSeconds = "0" + strSeconds;

 

            return strHours + ":" + strMinutes + ":" + strSeconds;
        }
    }
}

 

        实际的执行代码比上面的要多,本范例演示了Timer在实际环境中的一个简单应用,仅仅使用了一些简单的基础知识来创建一个简单的应用。