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

简介:

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

 

Timer对象基础

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

using System.Threading;
   
   
using System.Timers;
   
   

       接下来,介绍一下创建一个Timer的要点以及为这个timer对象的Elapsed事件设定事件委派。

       先创建一个Timer对象,这里我定义我使用的timertimerClock接下来设定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.NETWin 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;
    
    
        }
    
    
    }
    
    
}
    
    

 

代码参考

实际的执行代码比上面的要多,但demo中关于播放wave音频的代码是取自Ianier Munoz关于A low-level audio player in C#一文,顺便一提,Ianier Munoz编写的播放wave的这个类十分便于使用和重用。

 

总结

       这个应用程序演示了timer在实际环境中的一个简单应用,仅仅使用了一些简单的基础知识来创建一个简单的应用,我希望在我之后有人能给出它的更多更好的用法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值