首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - .NET 阅读:3833   评论: 1    参与评论
标题   使用timer控件创建一个简单的报警程序     选择自 dragontt 的 Blog
关键字   timer
出处   http://www.codeproject.com/csharp/timeralarm.asp

简介:

       当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了一会儿去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从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在实际环境中的一个简单应用,仅仅使用了一些简单的基础知识来创建一个简单的应用,我希望在我之后有人能给出它的更多更好的用法。


相关文章
对该文的评论
feigehao ( 2003-10-12)
用timer比较简单的,很希望有用TIMER做WINDOWS后台服务的,