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 指定时间段内定时执行的Windows服务(System.Threading.Thread)的更多相关文章

  1. 【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)

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

  2. .net 开发定时执行的windows服务

    环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...

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

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

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

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

  5. Windows服务 System.ServiceProcess.ServiceBase类

    一.Windows服务 1.Windows服务应用程序是一种需要长期运行的应用程序,它适合服务器环境. 2.无用户界面,任何消息都会写进Windows事件日志. 3.随计算机启动而启动,不需要用户一定 ...

  6. Windows服务System权限下在当前用户桌面创建快捷方式C#实例程序

    Windows服务一般运行在System权限下,这样权限比较高,方便执行一些高权限的操作. 但是,Environment.GetFolderPath等函数获取的也是System用户下的,而不是当前用户 ...

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

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

  8. Windows服务定时执行任务

    1.创建多线程类 /// <summary> /// 多线程 /// </summary> public abstract class MuliThread<T> ...

  9. windows服务

    .net windows 服务创建.安装.卸载和调试   原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...

随机推荐

  1. n个筛子的点数

    题目:把n个筛子扔到地上,所有筛子朝上一面的点数之和为s,输入n,打印出s的所有可能的值出现的概率. 分析: 方法1:递归. 要求概率,那么我们首先只需要求出每个s出现的次数/(6^n).怎么求s的次 ...

  2. Python subprocess Popen

    目的:顺序执行进程  在Bash里面类似  a.sh && b.sh && c.sh 先来说下Popen这个函数 class subprocess.Popen(args ...

  3. 不适用临时空间,交换变量a和b

    方法1: a = a + b; b = a - b; a = a - b; 方法2: a ^= b; b ^= a; a ^= b; 方法3: a = a * b; b = a / b; a = a  ...

  4. HDU-4638 Group 树状数组+离线

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4638 个人认为比较不错的题目. 题意:给一个1-n的排列,询问区间[l,r]的数排序后连续区间的个数. ...

  5. [C语言 - 14] 进制

    进制 二进制 int number = 0B1010; 没有二进制的输出格式   八进制     int number2 = 07613;     printf("number2 = %o\ ...

  6. [OC Foundation框架 - 3] 指向指针的指针

    使用函数改变NSString void changeStr2(NSString **str3) { *str3 = "; } int main(int argc, const char * ...

  7. 优化UITableViewCell高度计算的那些事(RunLoop)

    这篇总结你可以读到: UITableView高度计算和估算的机制 不同iOS系统在高度计算上的差异 iOS8 self-sizing cell UITableView+FDTemplateLayout ...

  8. DS18B20 for STM32 源代码 【worldsing笔记】

    DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式:温度测量范围为-55℃-+125℃,可编程为9位-12位A/D转换精度,测温分辨率可达0.0625℃.主 ...

  9. Swift基本语法及与OC比较之二

    //MARK:-----------------控制流----------------- //MARK: 1.for - in 循环 ,不用声明Value类型 //for value in 1...6 ...

  10. maven依赖传递关系

    一.maven 依赖传递规则 举个例子,比如A依赖B,B依赖C,那么A也是依赖C的.A是对B的直接依赖,A对C是传递依赖 ①.最短路劲原则 如,路劲一:A依赖B,B依赖C,C依赖D(1.0.0): 路 ...