问题描述
- C#编写番茄钟倒计时器
-
哪位大神知道那个倒计时器怎么编啊,三十分钟为一个番茄,每次计时完都把以前的番茄数加起来,并做一个显示番茄个数的界面
解决方案
直接设置一个 Timer,超时时间设置为30分钟。超时时间到了,加一;重新开始计时。重复这一过程就可以完成想要的。
解决方案二:
http://blog.csdn.net/hugoandpig/article/details/7743452
解决方案三:
public static void workOvertimeTimerCallback(object obj)
{
//在这里定义你的逻辑
DateTime dt = DateTime.Now;
if (dt.Hour == 21 && dt.Minute > 0)
{
MessageBox.Show("ok");
}
}
public static System.Threading.Timer workOvertimeTimer = null;
//在线程或Form中添加以下语句;
workOvertimeTimer = new System.Threading.Timer(new TimerCallback(workOvertimeTimerCallback), null, 1000, 10000);
解决方案四:
在C#中提供了三种类型的计时器:
1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
2、基于服务器的计时器(System.Timers.Timer)
3、线程计时器(System.Threading.Timer)
一、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
首先注意一点就是:Windows 计时器是为单线程环境设计的
此计时器从Visual Basic 1.0 版起就存在于该产品中,并且基本上未做改动
这个计时器是使用最简单的一种,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了
二、基于服务器的计时器(System.Timers.Timer)
System.Timers.Timer不依赖窗体,是从线程池唤醒线程,是传统的计时器为了在服务器环境上运行而优化后的更新版本,在VS2008的工具箱中没有提供现成的控件,需要手工编码使用此计时器
三、线程计时器(System.Threading.Timer)
线程计时器也不依赖窗体,是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。对消息不在线程上发送的方案中,线程计时器是非常有用的。
这里只对基于服务器的计时器做一下简单介绍,有兴趣的朋友可以查看相关资料;
第一次写这个windows服务程序时,我用的是第一种计时器,结果可想而知,没有达到我想要的结果,服务程序并没有听从我的指挥而乖乖得执行相应的功能,结果找了一些资料发现服务程序中建议不要使用 System.Windows.Forms.Timer 组件,因为它可能会产生不可预料的“罢工”问题;应使用System.Timer 组件;缺点是它和System.Windows.Forms.Timer不同,它需要手工编写事件,它是使用Elapsed事件
代码实现时这样的:
System.Timers.Timer timer = new System.Timers.Timer(600000);
protected override void OnStart(string[] args)
{
timer.Elapsed+=new System.Timers.ElapsedEventHandler(timer_Elapsed);//使用Elapsed事件,其中timer_Elapsed就是你需要处理的事情
timer.AutoReset = true;
timer.Enabled = true;
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
///
/// 功能代码
///
}