ITPub博客

首页 > 应用开发 > IT综合 > 使用timer控件创建一个简单的报警程序 (转)

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

原创 IT综合 作者:amyz 时间:2007-08-16 17:50:43 0 删除 编辑
使用timer控件创建一个简单的报警程序 (转)[@more@]

简介:XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

  当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了“一会儿”去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从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;


  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关于ASP">A low-level audio player in C#一文,顺便一提,Ianier Munoz编写的播放wave的这个类十分便于使用和重用。

总结

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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10752019/viewspace-962355/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: AD & ADSI入门 (转)
请登录后发表评论 登录
全部评论
  • 博文量
    3982
  • 访问量
    7896395