1. 创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:
  2. 编写Windows服务程序
    创建后会生成两个文件 Program.cs 和 Service1.cs(我已重命名为MyService.cs),编写服务内容:

    具体服务代码:
     using System;
    using System.Configuration;
    using System.ServiceProcess;
    using System.Threading; namespace WindowsServiceTest
    {
    public partial class MyService : ServiceBase
    { private Thread _thread = null;
    private bool serviceIsRun = false; // 是否一直运行 public MyService()
    {
    InitializeComponent();
    } protected override void OnStart(string[] args)
    {
    LogHelper.WriteLog("服务启动...");
    serviceIsRun = true;
    _thread = new Thread(CheckSrv);
    _thread.Start();
    } protected override void OnStop()
    {
    serviceIsRun = false;
    LogHelper.WriteLog("服务停止...");
    } protected void CheckSrv()
    {
    var beginTime = ConfigurationManager.AppSettings["BeginTime"];
    var endTime = ConfigurationManager.AppSettings["EndTime"];
    while (serviceIsRun)
    {
    try
    {
    if (IsRunTime(beginTime, endTime))
    {
    // TODO:
    for (int i = ; i < ; i++)
    {
    if (!IsRunTime(beginTime, endTime))
    {
    Thread.Sleep( * );
    }
    else
    {
    LogHelper.WriteLog("当前数字:" + i);
    }
    }
    }
    else
    {
    Thread.Sleep( * );
    LogHelper.WriteLog("未达到服务执行时间...");
    }
    }
    catch (Exception ex)
    {
    LogHelper.WriteLog("服务发生异常:" + ex.ToString());
    }
    }
    } /// <summary>
    /// 判断程序是否在设置运行时间内
    /// </summary>
    /// <param name="startTime">开始执行时间</param>
    /// <param name="overTime">执行结束时间</param>
    /// <returns>true:在执行时间内,false:在执行时间外</returns>
    private bool IsRunTime(string startTime, string overTime)
    {
    var flag = false; var beginTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + startTime);
    var endTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " " + overTime); if (beginTime <= endTime) // 当天
    {
    flag = beginTime <= DateTime.Now && DateTime.Now <= endTime;
    }
    else // 跨天
    {
    var zeroTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd") + " 00:00");
    flag = (beginTime <= DateTime.Now && DateTime.Now <= zeroTime.AddDays()) || (zeroTime <= DateTime.Now && DateTime.Now <= endTime);
    } return flag;
    }
    }
    }

    配置文件:

     <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <appSettings>
    <add key="LogPath" value="Log"/>
    <add key="BeginTime" value="10:28"/>
    <add key="EndTime" value="10:38"/>
    </appSettings>
    </configuration>

    日志代码:

     using System;
    using System.Configuration;
    using System.IO;
    using System.Text; namespace WindowsServiceTest
    {
    internal class LogHelper
    {
    /// <summary>
    /// 记录日志
    /// </summary>
    /// <param name="logContext">日志内容</param>
    public static void WriteLog(string logContext)
    {
    var logPath = AppDomain.CurrentDomain.BaseDirectory + ConfigurationManager.AppSettings["LogPath"].ToString();
    if (!Directory.Exists(logPath))
    {
    Directory.CreateDirectory(logPath);
    }
    var filePath = logPath + "\\" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
    var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
    var m_streamWriter = new StreamWriter(fs);
    m_streamWriter.BaseStream.Seek(, SeekOrigin.End);
    var sb = new StringBuilder();
    if (!string.IsNullOrEmpty(logContext))
    {
    sb.Append(Environment.NewLine);
    sb.Append(logContext);
    }
    sb.Append(" "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")+Environment.NewLine);
    m_streamWriter.WriteLine(sb.ToString());
    m_streamWriter.Flush();
    m_streamWriter.Close();
    fs.Close();
    }
    }
    }

【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)的更多相关文章

  1. .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)

    创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...

  2. C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)

    系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...

  3. SpringMVC学习系列-后记 解决GET请求时中文乱码的问题

    SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...

  4. paraview显示指定时间段的时均图(两种方法)

    方法一: 首先计算以后会得到每个时刻的网格数据,如下图: 但是我们只想要比如最后2s的数据,如果直接导入,paraview会把从0s时刻的数据全部加载,做时均图的时候也就是对整个时间段做时均,不是我们 ...

  5. 全网最详细的Git学习系列之安装各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)

    不多说,直接上干货! 目前Git图形客户端 TortoiseGit .SourceTree .GitUp .SmartGit .QGit .GitX .Gitnub.Tower .Git-cola . ...

  6. 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)

    不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的  ...

  7. Windows Service 学习系列(一):建立简单的Windows service

    参考:https://www.cnblogs.com/cncc/p/7170951.html 一.开发环境 操作系统:Windows 7 X64 开发环境:VS2017 编程语言:C# .NET版本: ...

  8. ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法

    ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...

  9. LINQ学习系列-----2.3 迭代器带来的延迟查询

    此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行                      废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...

随机推荐

  1. CCF|公共钥匙盒|Java

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = ...

  2. nginx负载均衡浅析

    熟悉Nginx的小伙伴都知道,Nginx是一个非常好的负载均衡器.除了用的非常普遍的Http负载均衡,Nginx还可以实现Email,FastCGI的负载均衡,甚至可以支持基于Tcp/UDP协议的各种 ...

  3. linux命令useradd添加用户

    linux命令useradd添加用户详解 1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. 2.格式 useradd [-d home] [-s ...

  4. MSSQL 重新生成索引,重新组织索引

    > 5% 且 < = 30% ALTER INDEX REORGANIZE > 30% ALTER INDEX REBUILD WITH (ONLINE = ON)* * 重新生成索 ...

  5. 使用VC++编写QQ群发器,MFC做UI

    由于公司业务需要,QQ群发器经常被用来发送QQ广告,购买的QQ群发器不好用不说,而且是按机器收费的,有些功能还不能修改. 所以公司派我来开发一款自己的QQ群发器,我给群发器取名叫做飞速群发器,用来给软 ...

  6. Beta冲刺提交-星期五

    Beta冲刺提交-星期五 这个作业属于哪个课程 软件工程 这个作业要求在哪里 <作业要求的链接> 团队名称 唱跳RAP编程 这个作业的目标 1.进行每日例会,每个成员汇报自己今天完成    ...

  7. bzero - 向字符串写入零

    总览 (SYNOPSIS) #include <string.h> void bzero(void *s, size_t n); 描述 (DESCRIPTION) bzero() 函数 把 ...

  8. linux远程开机

    它需要wakeonlan这个软件,     从何处得到它?     它的官方站是:http://sourceforge.net/projects/wake-on-lan/     如果使用rpm包可以 ...

  9. PowerDesigner连接MySQL数据库

    详细步骤请点击下面的链接查看! 我在网上找了很多篇教程, 其中这一篇是最好的. 可以成功的帮助我们把PowerDesigner和MySQL数据库相连. PowerDesigner真的非常强大! 设计数 ...

  10. [Luogu] P1131 [ZJOI2007]时态同步

    题目描述 题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3…进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何 ...