使用timer控制元件建立一個簡單的報警程式 (轉)
簡介::namespace prefix = o ns = "urn:schemas--com::office" />
當我使用工作時,我總是如此的專心致志,以至於每當我過了“一會兒”去看時間時,發現已經過了三個小時,而我卻完全沒有意識到!所以我決定使用我從Code Project學來的技術,來建立一個簡單的應用—使用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( , ElapsedEventArgs e )
{
//Your code here
}
在報警程式中使用Timer控制元件
好的,介紹了這些基礎,現在,我們來看在實際應用中的程式碼。注意,這裡並不包括播放wave音樂和顯示最小化圖示的程式碼,完整的程式碼你可以在那個demo專案中看到,基本上我是直接從jow Blow撰寫的《Low level audio s》中貼上的播放wave的程式碼。
在下面的程式碼中,你可以看到,我將例項化Timer物件的方法放在我自己的初始化方法InitializeTimer()
中,這個方法將被類構造呼叫。並且我建立了兩個方法,inputToSeconds()
和secondsToTime()
用來將字串格式的時間格式轉換為正型,以及一個反處理過程。這些方法只是用來幫助我們在TextBox控制元件中顯示日期格式,這在整個應用的結構中,並不十分重要。其他的那些程式碼,是標準的為Win Form程式生成的樣板。
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System..Forms;
using System.Data;
using System.Threading;
using System.Timers;
using System.IO;
using System.Reflection;
namespace timerAlarm
{
public class TimerFo: 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 overr 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 stnutes = 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在實際環境中的一個簡單應用,僅僅使用了一些簡單的基礎知識來建立一個簡單的應用,我希望在我之後有人能給出它的更多更好的用法。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962355/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個慢查詢報警的簡單處理
- 建立一個簡單的小程式
- 不使用ATL嚮導,建立一個簡單的ATL對話方塊程式. (轉)
- 一個簡單的解密程式 (轉)解密
- 一條簡單的報警資訊發現的oracle bugOracle
- 一個簡單的檔案管理程式 (轉)
- 一個簡單的愷撒加密程式 (轉)加密
- [轉]:如何快速構建一個簡單的程式
- 一個簡單的學生成績管理程式 (轉)
- 使用Tkinter模組來建立簡單的GUI程式GUI
- 一個用Perl分析Apache Log的簡單程式(轉)Apache
- 最簡單的dockerfile使用教程 - 建立一個支援SSL的Nginx映象DockerNginx
- sql使用cursor寫一個簡單的迴圈<轉>SQL
- SmartSql使用教程(1)——初探,建立一個簡單的CURD介面服務SQL
- 使用Gradle建立一個最簡單的Spring Boot專案GradleSpring Boot
- WPF一個簡單的屬性編輯控制元件控制元件
- 使用Dockerfile建立一個tomcat映象,並執行一個簡單war包DockerTomcat
- 用java實現一個簡單的房屋管理程式。 (轉)Java
- 建立第一個簡單的AI分類器AI
- 一個簡單的守護程式
- 使用vue-cli腳手架工具建立一個簡單的單頁應用Vue
- 一個簡單的Webmail系統 (轉)WebAI
- 一個簡單的考勤系統 (轉)
- Go的第一個Hello程式 簡簡單單 - 快快樂樂Go
- Python使用Socket寫一個簡單聊天程式Python
- 使用 Vala 編寫一個簡單的文字識別程式
- 【RickTsuei】寫一個簡單的ASP.NET Web應用程式線上使用者列表控制元件ASP.NETWeb控制元件
- 教你如何寫一個簡單的折線圖控制元件控制元件
- [Vue]寫一個簡單的檔案上傳控制元件Vue控制元件
- 第1個簡單java程式(轉)Java
- 用 Vue 建立一個簡單的 electron 桌面應用Vue
- NodeJs 建立一個簡單的登陸註冊NodeJS
- Laravel Nova 入門建立一個簡單的部落格Laravel
- 一條細小的報警簡訊的處理
- 一個簡單的反射連線程式反射線程
- 一個簡單的字串查詢程式字串
- 製作一個報警系統
- Fresco框架SimpleDraweeView控制元件的簡單使用框架View控制元件