【.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();
}
}
}
【.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 ...
随机推荐
- 了解移动用户的隐私期望:一种基于推荐的Crowdsourcing方法
应学习之需,最近一段时间阅读了一篇论文,特写下总结,若有纰漏,还望指出. 目录 引言 推荐机制 实现 评估 心得 1.1 为什么要了解移动用户的隐私期望 1.移动设备的广泛使用存在一些潜在的隐私威胁和 ...
- 3D旋转矩阵的推导过程
3D旋转矩阵的推导过程 包含平移的线性变换称作仿射变换,3D中的仿射变换不能用 3 x 3 矩阵表达,必须使用4 x 4矩阵. 一般来说,变换物体相当于以相反的量变换描述这个物体的坐标系.当有多个变换 ...
- 程序员段子:世界上最大的同性交友平台github
程序员(又名程序猿)因为总是冲锋在网络的最前端,还有程序猿的各种特殊性,大家在茶余饭后都有很多关于程序员的段子流传.大多都是程序员自黑的,先说在前面,程序猿还是很好的!下面看看你有没有中枪的那一条呢? ...
- [安卓开发板]迅为IMX6 四核Android开发板
工业级核心板-Android开发板 10层高速PCB设计,充分保证电磁兼容 处理器:开发板默认是四核商业扩展级芯片,可根据用户需求更换单核.双核.工业级.汽车级处理器,批量更省成本. 扩展引脚:320 ...
- 整合Activiti Modeler到业务系统(或BPM平台)
http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把 ...
- JAVA——不简单的fianl关键字
protected用来修饰 域,代表域的访问权限是:包权限 或者 不同包,但是是子类 : final 修饰常量只要是该常量代入的计算式,在编译时期,就会被执行计算,以减轻运行时的负担.(只对基本数据类 ...
- 配置个人Ip代理池
做爬虫最害怕的两件事一个是被封账户一个是被封IP地址,IP地址可以使用代理来解决,网上有许多做IP代理的服务,他们提供大量的IP地址,不过这些地址不一定都是全部可用,因为这些IP地址可能被其他人做爬虫 ...
- JavaSE-09 继承
学习要点 继承的优点和实现 子类重写父类方法 继承下构造方法的执行过程 抽象类和抽象方法的使用 final修饰属性.方法和类 继承的优点和实现 宠物管理系统优化设计 宠物管理系统中的类有什么问题? 使 ...
- Getting start with dbus in systemd (02) - How to create a private dbus-daemon
Getting start with dbus in systemd (02) 创建一个私有的dbus-daemon (session) 环境 这里我们会有两个app: app1(client),ap ...
- html页面比较长,如何用js实现网页一打开显示在网页的中部?
加入js代码 <style type="text/css"> body { height: 2000px; } </style> <script ty ...