【.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 ...
随机推荐
- Bmob使用心得
1.在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址,示例如下:(注意文字说明部分): allprojects { repositories { jcente ...
- 微信小程序组件解读和分析:十一、label标签
label标签组件说明: label标签,与html的label标签基本一样.label 元素不会向用户呈现任何特殊效果.不过,它为鼠标用户改进了可用性.如果您在 label 元素内点击文本,就会触发 ...
- jquery 序列化form表单
1.为什么要将form表单序列化? ajax上传form表单的原始方式,是将form表单中所需要的键值对先获取,然后再组装成数据(两种方式:http:localhost:8080/test.do?pe ...
- MySQL——sql注入
https://blog.csdn.net/lin_tuer/article/details/54809330 https://github.com/mysqljs/mysql#escaping-qu ...
- 怎样在nexus 中 搜索到远程maven仓库中的jar 文件
怎样在nexus 中 搜索到远程maven仓库中的jar 文件 url: http://www.oschina.net/question/95712_21999 点击Administration菜单下 ...
- 针对windowsserver 创建iis站点访问出错的解决方案(HTTP 错误 500.19 - Internal Server Error)
错误如下: 服务器错误 Internet信息服务 7.0 错误摘要HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效. 详 ...
- WebDAV协议
WebDAV是一项基于 Http1.1 协议的通信协议.它扩展了HTTP 1.1,在Get.Post.Put.Delete 等HTTP标准方法外添加了新方法,使应用程序可对Web Server直接读写 ...
- tomcat 去掉项目名后,还可以用项目名
在server.xml添加以下代码: <Context path="/" docBase="../webapps/jeeplus/" reloadable ...
- pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法
squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...
- vue跨域解决方法 及设置api路径方法
vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' header is prese ...