C#的windows service定时器使用

在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();  
        }  
  
    }  

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值