C#使用timer实现的简单闹钟程序

本文实例讲述了C#使用timer实现的简单闹钟程序。分享给大家供大家参考。具体如下:

当我在电脑上工作,我经常会被一些东西吸引,比如某宝,结果三个小时过去了我都完全没有注意到。所以我通过C#做了一个简单闹钟程序,这个小程序主要使用C# Timer对象,让用户设定一个倒计时的时长,如果时间到了,就播放一个wav音频文件(也就是闹铃)。

我一直试图保持这个timer的简单性,但我还是添加了一些额外的功能,在状态栏中显示一个通知图标。
通过这个小应用你也可以了解到C#中timer定时器的一些简单用法。

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
    /// <SUMMARY>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </SUMMARY>
    private void InitializeComponent()
    {
      this.components = new System.ComponentModel.Container();
      System.Resources.ResourceManager resources = new System.
        Resources.ResourceManager(typeof(TimerForm));
      this.timerInput = new System.Windows.Forms.TextBox();
      this.StartButton = new System.Windows.Forms.Button();
      this.ResetButton = new System.Windows.Forms.Button();
      this.SuspendLayout();
      //
      // timerInput
      //
      this.timerInput.Location = new System.Drawing.Point(12, 13);
      this.timerInput.Name = "timerInput";
      this.timerInput.Size = new System.Drawing.Size(50, 20);
      this.timerInput.TabIndex = 0;
      this.timerInput.Text = "00:00:00";
      //
      // StartButton
      //
      this.StartButton.FlatStyle = System.Windows.Forms.
        FlatStyle.System;
      this.StartButton.Location = new System.Drawing.Point(75, 11);
      this.StartButton.Name = "StartButton";
      this.StartButton.TabIndex = 1;
      this.StartButton.Text = "Start";
      this.StartButton.Click += new System.EventHandler
        (this.StartButton_Click);
      //
      // ResetButton
      //
      this.ResetButton.FlatStyle = System.Windows.Forms.
        FlatStyle.System;
      this.ResetButton.Location = new System.Drawing.Point(161, 11);
      this.ResetButton.Name = "ResetButton";
      this.ResetButton.TabIndex = 2;
      this.ResetButton.Text = "Reset";
      this.ResetButton.Click += new
        System.EventHandler(this.ResetButton_Click);
      //
      // TimerForm
      //
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(247, 46);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {
         this.ResetButton,
         this.StartButton,
         this.timerInput});
      this.FormBorderStyle = System.Windows.Forms.
        FormBorderStyle.FixedSingle;
      this.Icon = ((System.Drawing.Icon)(resources.
        GetObject("$this.Icon")));
      this.MaximizeBox = false;
      this.Name = "TimerForm";
      this.StartPosition = System.Windows.Forms.
        FormStartPosition.CenterScreen;
      this.Text = "Alarm Timer";
      this.Resize += new System.EventHandler(this.
        TimerForm_Resized);
      this.ResumeLayout(false);
    }
    #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;
    }
  }
}

完整实例代码点击此处本站下载。

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • c#各种Timer类的区别与用法介绍

    System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务.在必须更新用户界面的情况下,建议不要使用该计时器,因为它的回调不在用户界面线程上发生.在此类情况下,System.Windows.Threading.DispatcherTimer 是更好的选择,因为其事件是在用户界面线程上引发的. 多线程计时器1:System.Threading.Timer2:System.Timers.Timer 特殊目的的单线程计时器:1:System.Window

  • C#中Timer使用及解决重入问题

    ★前言 打开久违的Live Writer,又已经好久没写博客了,真的太懒了.废话不多说了,直接进入这次博客的主题--Timer.为什么要写这个呢,因为前几天应朋友之邀,想做个"黑客"小工具,功能挺简单就是自动获取剪贴板的内容然后发送邮件,就需要用到Timer来循环获取剪贴板的内容,但是由于到了发送邮件这个功能,使用C#的SmtpClient始终发送不了邮件,以前写过类似发邮件的功能,当时可以用网易的,现在也不能用了,不知道咋回事,只好作罢.在使用Timer中遇到了之前没有想过的问题--

  • C#自定义基于控制台的Timer实例

    本文实例讲述了C#自定义基于控制台的Timer实现方法.分享给大家供大家参考.具体如下: 一.概述 这里实现了一个自定义类TimerTest,该类可以模拟一个Timer,经过指定时间间隔执行某个事件. 二.TimerTest类 //定时器类 class TimerTest { //线程名 string _ThreadName; public string ThreadName { get { return _ThreadName; } private set { _ThreadName = va

  • C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析

    本文实例讲述了C#中Forms.Timer.Timers.Timer.Threading.Timer的用法分析,分享给大家供大家参考.具体分析如下: 在.NET Framework里面提供了三种Timer ① System.Windows.Forms.Timer ② System.Timers.Timer ③ System.Threading.Timer 现分述如下: 一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用

  • 详解C#中的定时器Timer类及其垃圾回收机制

    关于C# Timer类  在C#里关于定时器类就有3个 C# Timer使用的方法1.定义在System.Windows.Forms里 C# Timer使用的方法2.定义在System.Threading.Timer类里  " C# Timer使用的方法3.定义在System.Timers.Timer类里 下面我们来具体看看这3种C# Timer用法的解释: (1)System.Windows.Forms.Timer 应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或D

  • [C#].NET中几种Timer的使用实例

    这篇博客将梳理一下.NET中4个Timer类,及其用法. 1. System.Threading.Timer public Timer(TimerCallback callback, object state, int dueTime, int period); callback委托将会在period时间间隔内重复执行,state参数可以传入想在callback委托中处理的对象,dueTime标识多久后callback开始执行,period标识多久执行一次callback. using Syst

  • C#中timer定时器用法实例

    本文实例讲述了C#中timer定时器用法.分享给大家供大家参考.具体如下: 下面的代码通过Timer定时器每隔1000毫秒(1秒)触发一次事件 using System; using System.Timers; class TestTimer { public static void Main () { Timer timer = new Timer(); timer.Elapsed + = new ElapsedEventHandler(DisplayTimeEvent); timer.In

  • C#使用timer定时在屏幕上输出信息的方法

    本文实例讲述了C#使用timer定时在屏幕上输出信息的方法.分享给大家供大家参考.具体分析如下: 这段c#代码通过timer定时器每隔5秒钟调用一次OnTimerElapsed事件,在屏幕上输出信息,这是一个简单的timer定时器使用范例,可以大概了解一些C#中timer的用法 using System; using System.Timers; public class Program { private static System.Timers.Timer testTimer; public

  • C#中的Timer和DispatcherTimer使用实例

    Timer组件是基于服务器的计时器,通过设置时间间隔Interval,周期性的触发Elapsed事件. 用法如下: 复制代码 代码如下: class Program {         static System.Timers.Timer Timer1 = new System.Timers.Timer();         static void Main() {             Timer1.Interval = 1000;             Timer1.Elapsed +=

  • C#中timer类的用法总结

    C#中timer类的用法关于C#中timer类  在C#里关于定时器类就有3个   1.定义在System.Windows.Forms里   2.定义在System.Threading.Timer类里   3.定义在System.Timers.Timer类里 System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的.它的主要缺点是计时不精确,而且必须有

  • C#中自定义高精度Timer定时器的实例教程

    1.背景 在C#里关于定时器的类就有3个: (1)定义在System.Windows.Forms里   (2)定义在System.Threading.Timer类里   (3)定义在System.Timers.Timer类里 Timer 用于以用户定义的事件间隔触发事件.Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理.它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程. 使用此计时器时,请使用控件的Tick事件执行轮询操作,

随机推荐