简介:
当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了“一会儿”去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从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
}
好的,介绍了这些基础,现在,我们来看在实际应用中的代码。注意,这里并不包括播放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
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<script type="text/javascript">
</script><script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>