在C#中提供了三种类型的计时器:
1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
2、基于服务器的计时器(System.Timers.Timer)
3、线程计时器(System.Threading.Timer)
一、(System.Windows.Forms.Timer) //经常出错不建议使用
注意:Windows 计时器单线程环境(out了)
只要把工具箱中的Timer控件拖到窗体上,设置事件和间隔时间等属性就可用
二、(System.Timers.Timer)
System.Timers.Timer不依赖窗体需要手工编码使用此计时器
三、线程计时器(System.Threading.Timer)
线程计时器也不依赖窗体,是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。对消息不在线程上发送的方案中,线程计时器是非常有用的。
代码实现:
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)
{
///
/// 功能代码
///
}
其他示例:
public Service1()
{
InitializeComponent();
System.Timers.Timer tm = new System.Timers.Timer(86400000);//设置时间间隔为24h
tm.Elapsed += new System.Timers.ElapsedEventHandler(TimeElapse);//到达时间的时候执行事件
//设置为每24h执行一次,则需要开启AutoReset
tm.AutoReset = true;//设置是执行一次(false)还是一直执行(true)
tm.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件
}
public void TimeElapse(object source, System.Timers.ElapsedEventArgs e)
{
//执行的代码放在这里
}
更加完整的代码如下(将启动与关闭记录写在txt文件中)
class Service17: System.ServiceProcess.ServiceBase
{
public Service17()//可以自己设定
{
this.ServiceName = "MyServiceForShowTime";
this.CanStop = true;
this.CanPauseAndContinue = true;
this.AutoLog = true;
//定时器事件
Timer aTimer = new Timer(); //System.Timers,不是form的
aTimer.Elapsed += new ElapsedEventHandler(TimedEvent);
aTimer.Interval = 2 * 1000; //配置文件中配置的秒数
aTimer.Enabled = true;
}
protected override void OnStart(string[] args)//自己根据要求覆写
{
FileStream fs = new FileStream(@"d:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine("mcWindowsService: Service Started" + DateTime.Now.ToString() + "\n");
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}
protected override void OnStop()
{
FileStream fs = new FileStream(@"d:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine(" mcWindowsService: Service Stopped " + DateTime.Now.ToString() + "\n");
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}
private static void TimedEvent(object source, ElapsedEventArgs e) //运行期间执行
{
FileStream fs = new FileStream(@"d:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine(" Running.11.. " + DateTime.Now.ToString() + "\n");
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}
}