1. 创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:
    【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
  2. 编写Windows服务程序
    创建后会生成两个文件 Program.cs 和 Service1.cs(我已重命名为MyService.cs),编写服务内容:
    【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
    具体服务代码:
     1 using System;
     2 using System.Configuration;
     3 using System.ServiceProcess;
     4 using System.Threading;
     5 
     6 namespace WindowsServiceTest
     7 {
     8     public partial class MyService : ServiceBase
     9     {
    10 
    11         private Thread _thread = null;
    12         private bool serviceIsRun = false;  // 是否一直运行
    13 
    14         public MyService()
    15         {
    16             InitializeComponent();
    17         }
    18 
    19         protected override void OnStart(string[] args)
    20         {
    21             LogHelper.WriteLog("服务启动...");
    22             serviceIsRun = true;
    23             _thread = new Thread(CheckSrv);
    24             _thread.Start();
    25         }
    26 
    27         protected override void OnStop()
    28         {
    29             serviceIsRun = false;
    30             LogHelper.WriteLog("服务停止...");
    31         }
    32 
    33         protected void CheckSrv()
    34         {
    35             var beginTime = ConfigurationManager.AppSettings["BeginTime"];
    36             var endTime = ConfigurationManager.AppSettings["EndTime"];
    37             while (serviceIsRun)
    38             {
    39                 try
    40                 {
    41                     if (IsRunTime(beginTime, endTime))
    42                     {
    43                         // TODO:
    44                         for (int i = 0; i < 10; i++)
    45                         {
    46                             if (!IsRunTime(beginTime, endTime))
    47                             {
    48                                 Thread.Sleep(1000 * 2);
    49                             }
    50                             else
    51                             {
    52                                 LogHelper.WriteLog("当前数字:" + i);
    53                             }
    54                         }
    55                     }
    56                     else
    57                     {
    58                         Thread.Sleep(1000 * 5);
    59                         LogHelper.WriteLog("未达到服务执行时间...");
    60                     }
    61                 }
    62                 catch (Exception ex)
    63                 {
    64                     LogHelper.WriteLog("服务发生异常:" + ex.ToString());
    65                 }
    66             }
    67         }
    68 
    69         /// <summary>
    70         /// 判断程序是否在设置运行时间内
    71         /// </summary>
    72         /// <param name="startTime">开始执行时间</param>
    73         /// <param name="overTime">执行结束时间</param>
    74         /// <returns>true:在执行时间内,false:在执行时间外</returns>
    75         private bool IsRunTime(string startTime, string overTime)
    76         {
    77             var flag = false;
    78 
    79             var beginTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + startTime);
    80             var endTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + overTime);
    81 
    82             if (beginTime <= endTime)   // 当天
    83             {
    84                 flag = beginTime <= DateTime.Now && DateTime.Now <= endTime;
    85             }
    86             else    // 跨天
    87             {
    88                 var zeroTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00");
    89                 flag = (beginTime <= DateTime.Now && DateTime.Now <= zeroTime.AddDays(1)) || (zeroTime <= DateTime.Now && DateTime.Now <= endTime);
    90             }
    91 
    92             return flag;
    93         }
    94     }
    95 }
    View Code

相关文章: