【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
- 创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图:
- 编写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();
- }
- }
- }
- using System;
【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)的更多相关文章
- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...
- C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)
系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- paraview显示指定时间段的时均图(两种方法)
方法一: 首先计算以后会得到每个时刻的网格数据,如下图: 但是我们只想要比如最后2s的数据,如果直接导入,paraview会把从0s时刻的数据全部加载,做时均图的时候也就是对整个时间段做时均,不是我们 ...
- 全网最详细的Git学习系列之安装各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)
不多说,直接上干货! 目前Git图形客户端 TortoiseGit .SourceTree .GitUp .SmartGit .QGit .GitX .Gitnub.Tower .Git-cola . ...
- 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)
不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的 ...
- Windows Service 学习系列(一):建立简单的Windows service
参考:https://www.cnblogs.com/cncc/p/7170951.html 一.开发环境 操作系统:Windows 7 X64 开发环境:VS2017 编程语言:C# .NET版本: ...
- ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法
ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...
- LINQ学习系列-----2.3 迭代器带来的延迟查询
此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行 废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...
随机推荐
- spark on yarn模式下内存资源管理(笔记1)
问题:1. spark中yarn集群资源管理器,container资源容器与集群各节点node,spark应用(application),spark作业(job),阶段(stage),任务(task) ...
- Java语法基础-异常处理
异常处理类层次结构图 检查异常与非检查异常 非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类.javac在编译时,不会提示和发现这 ...
- ORM-PetaPoco
PetaPoco有以下特色:--------------------------20170715姜彦 微小,没有依赖项……单个的C#文件可以方便的添加到任何项目中. 工作于严格的没有装饰的Poco类, ...
- (转)Spring使用AspectJ进行AOP的开发:注解方式
http://blog.csdn.net/yerenyuan_pku/article/details/69790950 Spring使用AspectJ进行AOP的开发:注解方式 之前我已讲过Sprin ...
- WPF学习- 新建项目后自定义Main()[Type 'App' already defines a member called 'Main' with the same parameter types]
问题点: 在App.xaml.cs中自己添加Main方法,编译会出现如下报错: 错误 CS0111 类型“App”已定义了一个名为“Main”的具有相同参数类型的成员 错误 Type 'App' a ...
- 解决【npm ERR! Unexpected end of JSON input while parsing near '...sh_time":141072930277'】方案
问题描述执行npm install的时候报错npm ERR! Unexpected end of JSON input while parsing near '...sh_time":141 ...
- idea文件全部变红, 文件全部红色
idea如果当前project用了版本控制器,其下面新建的所有的项目默认都是加入到版本控制里面,所以项目名称和文件都是红色的,如图: 看起来非常不爽, 那么如何解决呢? File–>Settin ...
- 04C#运算符
C#运算符 运算符分类 与C语言一样,如果按照运算符所作用的操作数个数来分,C#语言的运算符可以分为以下几种类型: l 一元运算符:一元运算符作用于一个操作数,例如:-X.++X.X--等. l ...
- TortoiseSVN文件夹操作
(1).安装SVN·客户端 (2) 建立库: 1.新建文件夹,目录和文件夹名称最好都用英文,不要使用中文: 2.打开文件夹,在空白处按下“shift键+鼠标右键”: 3.在弹出的菜单中选择“Torto ...
- mxnet.base.MXNetError: src/imperative/./imperative_utils.h:70: Check failed: inputs[i]->ctx().dev_mask() == ctx.dev_mask() (1 vs. 2)
mxnet 训练错误: mxnet.base.MXNetError: [14:42:22] src/imperative/./imperative_utils.h:70: Check failed: ...