使用timer控件创建一个简单的报警程序

简介:

当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了 “ 一会儿 ” 去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从 Code Project 学来的 C# 技术,来创建一个简单的应用程序 — 使用 Timer 对象来倒计时一个由我自己设定的时间,并一直循环播放一段 wave 音乐,直到你重设 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 控件

好的,介绍了这些基础,现在,我们来看在实际应用中的代码。注意,这里并不包括播放 wave 音乐和显示最小化图标的代码,完整的代码你可以在那个 demo 项目中看到,基本上我是直接从 jow Blow 撰写的《 Low level audio players 》中粘贴的播放 wave 的代码。

在下面的代码中,你可以看到,我将实例化 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;


<SPAN lang=CS style="mso-ansi-langu
Published At
Categories with Web编程
Tagged with
comments powered by Disqus