.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 指定时间段内定时执行的Windows服务(System.Threading.Thread)的更多相关文章
- 【.Net 学习系列】-- .Net 指定时间段内定时执行的Windows服务(System.Threading.Thread)
创建一个Windows服务项目:解决方案(右击)——> 添加 ——> 新建项目——>项目类型选择Windows——>模板选择Windows服务 ,如图: 编写Windows服务 ...
- .net 开发定时执行的windows服务
环境:win7+vs2010+Oracle11g+office2010(64位操作系统) 需求:开发定时执行的windows服务从数据库中查询数据下载到指定地址Excel中 一.添加新建项目——win ...
- C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)
系列一: 制作一个可安装.可启动.可停止.可卸载的Windows service(downmoon原创) 系列二:演示一个定期执行的windows服务及调试(windows service)(down ...
- paraview显示指定时间段的时均图(两种方法)
方法一: 首先计算以后会得到每个时刻的网格数据,如下图: 但是我们只想要比如最后2s的数据,如果直接导入,paraview会把从0s时刻的数据全部加载,做时均图的时候也就是对整个时间段做时均,不是我们 ...
- Windows服务 System.ServiceProcess.ServiceBase类
一.Windows服务 1.Windows服务应用程序是一种需要长期运行的应用程序,它适合服务器环境. 2.无用户界面,任何消息都会写进Windows事件日志. 3.随计算机启动而启动,不需要用户一定 ...
- Windows服务System权限下在当前用户桌面创建快捷方式C#实例程序
Windows服务一般运行在System权限下,这样权限比较高,方便执行一些高权限的操作. 但是,Environment.GetFolderPath等函数获取的也是System用户下的,而不是当前用户 ...
- ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法
ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...
- Windows服务定时执行任务
1.创建多线程类 /// <summary> /// 多线程 /// </summary> public abstract class MuliThread<T> ...
- windows服务
.net windows 服务创建.安装.卸载和调试 原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...
随机推荐
- python网络编程(六)---web客户端访问
1.获取web页面 urllib2 支持任何协议的工作---不仅仅是http,还包括FTP,Gopher. import urllib2 req=urllib2.Request('http://www ...
- javscript面试题(一)
你如何理解HTML结构的语意化? 1.去掉或样式丢失的时候能让页面呈现清晰的结构:2.屏幕阅读器(如果访客有视障)会完全根据你的标记来“读”你的网页:3.PDA.手机等设备可能无法像普通电脑的浏览器一 ...
- centos7 rabbitmq系统部署
CentOS7 1.安装系统 基础设施服务器:Java平台.Linux远程管理.开发工具 2.打开网络连接: (1)cd /etc/sysconfig/network-scripts/ #进入网络 ...
- 50道经典的JAVA编程题(31-35)
50道经典的JAVA编程题(31-35),今天考完了java,在前篇博客里面贴出了题了,见:<今天考试的JAVA编程题>.考完了也轻松了,下个星期一还考微机原理呢,啥都不会,估计今天就做到 ...
- 【转载】/etc/passwd & /etc/shadow 详解
转载自:http://blog.csdn.net/snlying/article/details/6130468 1,passwd文件passwd文件存放在/etc目录下.这个文件存放着所有用户帐号的 ...
- 【HBase学习】Apache HBase 参考手册 中文版
正在撰写,稍后来访……
- android 的开源输入法介绍,及 自动触摸的实现方法
输入法的开源代码见我自己的360云盘里的 openwnn-legacy-android-open-ime.tar.bz2 文件 http://www.pocketmagic.net/injecting ...
- Java网络编程(客户端和服务端原理)
运行下面的程序,浏览器端输入自己主机的IP地址+端口号(8888),会看到服务器返回的数据内容,Eclipse控制台会打印显示收到的信息, 通过我们自定义的服务器,可以看到浏览器端向服务器发送的请求信 ...
- DS18B20 for STM32 源代码 【worldsing笔记】
DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式:温度测量范围为-55℃-+125℃,可编程为9位-12位A/D转换精度,测温分辨率可达0.0625℃.主 ...
- css控制内容显示,自动加"..."
.css{ overflow:hidden; white-space:nowrap; text-overflow:ellipsis; width:100px; } c ...