c# windows 服务 定时器 每天凌晨0点整执行任务

84 篇文章 0 订阅
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Net.Mail;
namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        System.Timers.Timer timer1;  //计时器
        int iHour = 00;
        int iMinute = 00;
        int iSecond = 00;


        public Service1()
        {
            InitializeComponent();
        }


        protected override void OnStart(string[] args)
        {
            timer1 = new System.Timers.Timer();


            timer1.Interval = 1000;  //设置计时器事件间隔执行时间


            timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);


            timer1.Enabled = true;


            if (!EventLog.SourceExists("OnStart222"))
            {
                EventLog.CreateEventSource("OnStart222", "jason");
            }


            EventLog.WriteEntry("OnStart222", "开始任务了");
        }


        protected override void OnStop()
        {
            this.timer1.Enabled = false;
            EventLog.WriteEntry("OnStop", "任务结束");
        }
        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            int intHour = e.SignalTime.Hour;
            int intMinute = e.SignalTime.Minute;
            int intSecond = e.SignalTime.Second;
            // 设置  每秒钟的开始执行一次  
            //if (intSecond == iSecond)
            //{
            //    Console.WriteLine("每秒钟的开始执行一次!");
            //    write(intHour+":"+intMinute+":"+intSecond+"            每30秒钟的开始执行一次!\n\r");
            //}
            设置 每个小时的30分钟开始执行  
            //if (intMinute == iMinute && intSecond == iSecond)
            //{
            //    Console.WriteLine("每个小时的30分钟开始执行一次!");
            //     write("每个小时的30分钟开始执行一次!\n");
            //}
            // 设置 每天 00:00:00开始执行程序  
            if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
            {
                write(intHour + ":" + intMinute + ":" + intSecond + "            每天00:00:00!\n\r");
            }
        }
        //public void Send()
        //{
        //    //("smtp.126.com", "xxxx@126.com", "pwd", 25)
        //    System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();

        //    msg.To.Add("xxx@qq.com");
        //    msg.From = new MailAddress("xxxxx@126.com", "pwd", System.Text.Encoding.UTF8);
        //    msg.Subject = "这是测试邮件";
        //    msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码 
        //    msg.Body = "邮件内容";//邮件内容 
        //    msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码 
        //    msg.IsBodyHtml = false;//是否是HTML邮件 
        //    msg.Priority = MailPriority.High;//邮件优先级 


        //    SmtpClient client = new SmtpClient();
        //    object userState = msg;
        //    client.Host = "smtp.126.com";
        //    client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;  //该方法即通过外部网络发送.
        //    client.Credentials = new System.Net.NetworkCredential("username", "pwd");//邮箱登录账号,密码








        //}
        public void write(string str) 
        {
            string dt = str;
            int len = dt.Length;
            byte[] inputByts = new byte[len];
            inputByts = Encoding.GetEncoding("utf-8").GetBytes(dt);
            System.IO.FileStream fs = new System.IO.FileStream("c:/data.txt", System.IO.FileMode.OpenOrCreate);
            fs.Seek(0, System.IO.SeekOrigin.End);
            fs.Write(inputByts, 0, inputByts.Length);
            fs.Close();//关闭流


        }
    }
}


        / <summary>  
        / 定时器  
        / </summary>  
        //public void TimeDo()
        //{
        //    System.Timers.Timer aTimer = new System.Timers.Timer();
        //    aTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimeEvent);
        //    aTimer.Interval = 1000;
        //    aTimer.Enabled = true;
        //}
        / <summary>  
        / 定时器触发事件  
        / </summary>  
        / <param name="source"></param>  
        / <param name="e"></param>  
        //private static void TimeEvent(object source, System.Timers.ElapsedEventArgs e)
        //{
        //    int intHour = e.SignalTime.Hour;
        //    int intMinute = e.SignalTime.Minute;
        //    int intSecond = e.SignalTime.Second;
        //    int iHour = 10;
        //    int iMinute = 30;
        //    int iSecond = 00;
        //    // 设置  每秒钟的开始执行一次  
        //    if (intSecond == iSecond)
        //    {
        //        Console.WriteLine("每秒钟的开始执行一次!");
        //    }
        //    // 设置 每个小时的30分钟开始执行  
        //    if (intMinute == iMinute && intSecond == iSecond)
        //    {
        //        Console.WriteLine("每个小时的30分钟开始执行一次!");
        //    }
        //    // 设置 每天的10:30:00开始执行程序  
        //    if (intHour == iHour && intMinute == iMinute && intSecond == iSecond)
        //    {
        //        Console.WriteLine("在每天10点30分开始执行!");
        //    }
        //}  
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以通过在 Windows Service 的 OnStart 方法中创建一个新的线程来实现定时每天1执行任务。下面是一些实现步骤: 1. 创建一个 Windows Service 项目。 2. 在 Service1.cs 文件中,重写 OnStart 和 OnStop 方法。 3. 在 OnStart 方法中,创建一个新的线程,并在其中开启一个无限循环,每隔一段时间检查当前时间,并在1执行任务。 4. 在无限循环中,通过 Thread.Sleep 方法来控制检查时间的间隔。 下面是一个示例代码: ```csharp public partial class Service1 : ServiceBase { private Thread thread; private bool isRunning; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { // 创建新线程并启动 thread = new Thread(new ThreadStart(DoWork)); thread.Start(); } protected override void OnStop() { // 停止线程 isRunning = false; if (thread != null) { thread.Join(); } } private void DoWork() { isRunning = true; while (isRunning) { // 获取当前时间 DateTime now = DateTime.Now; // 如果当前时间是1,则执行任务 if (now.Hour == 1 && now.Minute == 0 && now.Second == 0) { // 执行任务的代码 // TODO: 在此处编写你的任务代码 } // 等待一段时间后再次检查 Thread.Sleep(1000); // 1秒钟 } } } ``` 需要注意的是,由于线程是在 OnStart 方法中创建的,因此需要在 OnStop 方法中停止线程。在停止线程之前,需要将 isRunning 设置为 false,以便让线程退出无限循环。此外,线程在执行任务时可能会占用较高的 CPU 和内存资源,因此需要根据实际情况来设置检查时间的间隔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值