原文地址:http://blog.csdn.net/andrew_wx/article/details/6659756
很好的一片文章,推荐大家去看下。
该例子是一个封装的计时器类。
实现功能:
(1)传入一个时间 HH:mm:ss 字符串 和 label控件对象 即可实现控件倒计时。
三行代码即可运行,如下图效果:
当然,每个项目需要的需求不同,这里只是抛砖引玉。
下面贴出我的代码,欢迎讨论。
完整代码:
- namespace ThreadTime
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- TimeSpan time = TimeSpan.Parse("01:00:00");
- TimeHelper myTime = new TimeHelper(time, label1);
- myTime.Open();
- }
- private void button2_Click(object sender, EventArgs e)
- {
- TimeSpan time = TimeSpan.Parse("01:00:00");
- TimeHelper myTime = new TimeHelper(time, label2);
- myTime.Open();
- }
- private void button3_Click(object sender, EventArgs e)
- {
- TimeSpan time = TimeSpan.Parse("00:00:05");
- TimeHelper myTime = new TimeHelper(time, label3);
- myTime.Open();
- }
- }
- }
其实只有三行代码,因为有3个计时器。所以写了9行。。
当然也可以写成两行代码,如下:
- TimeHelper myTime = new TimeHelper(TimeSpan.Parse("01:00:00"), label1);
- myTime.Open();
这是主窗体的代码,下面贴出TimeHelper.cs 类的关键代码。
TimeHelper完整代码:
引入命名空间:
- using System.Threading;
- using System.Windows.Forms;
完整代码:
- namespace ThreadTime
- {
- class TimeHelper
- {
- Thread thread;
- private TimeSpan time; //计时时间
- private TimeSpan endTime; //到点时间
- private Label lb;
- private bool whereExit = true;
- /// <summary>
- /// 设定计时器计时的时间
- /// </summary>
- /// <param name="StartTime">计时器时间,如:01:00:00 既1小时</param>
- public TimeHelper(TimeSpan StartTime,Label lb)
- {
- time = StartTime;
- this.lb = lb;
- }
- public void ShowLabel()
- {
- lb.Text = time.ToString();
- }
- /// <summary>
- /// 获取时间
- /// </summary>
- /// <returns></returns>
- public TimeSpan GetTime()
- {
- return time;
- }
- /// <summary>
- /// 开启计时器
- /// </summary>
- public void Open()
- {
- //计算到点时间
- TimeSpan tsNow = TimeSpan.Parse(DateTime.Now.ToString("HH:mm:ss"));
- TimeSpan tsAdd = time;
- endTime = tsNow + tsAdd;
- //线程开始
- whereExit = false;
- thread = new Thread(TimeThreadStart);
- thread.IsBackground = true;
- thread.Start();
- }
- /// <summary>
- /// 关闭计时器
- /// </summary>
- public void Close()
- {
- whereExit = true;
- thread.Join(1000);
- }
- private void TimeThreadStart()
- {
- while (!whereExit)
- {
- RunTime();
- Thread.Sleep(1000);
- }
- }
- private delegate void RunTimeDelegate();
- private void RunTime()
- {
- if (lb.InvokeRequired)
- {
- RunTimeDelegate d = RunTime;
- lb.Invoke(d);
- }
- else
- {
- time = endTime - TimeSpan.Parse(DateTime.Now.ToString("HH:mm:ss"));
- lb.Text = time.ToString();
- }
- }
- }
- }
若编译有问题,可以下载我上传的完整项目包: http://download.csdn.net/source/3494587
原文地址:http://blog.csdn.net/andrew_wx/article/details/6659756