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. opencv4android移植到系统app

    最近在尝试使用opencv4android实现投影仪的自动对焦功能,在AndroidStudio后需要将功能移到系统工程编译成系统app,仅以此文记录下移植过程中遇到的问题. 首先去opencv官网下 ...

  2. 镜像中的 Everything, GnomeLive ,KdeLive ,livecd ,NetInstall的区别?

    everything: 对完整版安装盘的软件进行补充,集成所有软件 GnomeLive , GNOME桌面版 KdeLive , KDE桌面版 livecd 光盘上运行的系统 ,NetInstall ...

  3. vue2.0 路由传参(router-link传过去)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. leetcode_712. Minimum ASCII Delete Sum for Two Strings

    https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 给定两个string s1,s2,从s1和s2中删除一些 ...

  5. python根据日期返回星期

    import  time #定义:timedate为时间戳def  formattime(timedate,s="%Y-%m-%d %H:%M:%S"):      return  ...

  6. JAVA基础——对象流

    对象的输入输出流的作用: 用于写入对象 的信息和读取对象的信息. 使得对象持久化.    ObjectInputStream   : 对象输入流    ObjectOutPutStream  :对象输 ...

  7. [Luogu] P4460 [CQOI2018]解锁屏幕

    题目背景 使用过Android 手机的同学一定对手势解锁屏幕不陌生.Android 的解锁屏幕由3X3 个点组成,手指在屏幕上画一条线,将其中一些点连接起来,即可构成一个解锁图案.如下面三个例子所示: ...

  8. Linux一键安装web环境全攻略phpstudy版

    此教程主要是应对阿里云Linux云服务器ecs的web环境安装,理论上不限于阿里云服务器,此教程对所有Linux云服务器都具有参考价值. 写这篇文章的目的:网上有很多关于Linux一键安装web环境全 ...

  9. Caused by: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。

    异常详情 2017-07-16 10:55:26,218 ERROR [500.jsp] - java.io.IOException: 你的主机中的软件中止了一个已建立的连接. org.apache. ...

  10. 杭电 2111 Saving HDU (贪心)

    Description 话说上回讲到海东集团面临内外交困,公司的元老也只剩下XHD夫妇二人了.显然,作为多年拼搏的商人,XHD不会坐以待毙的.   一天,当他正在苦思冥想解困良策的时候,突然想到了自己 ...