使用Windows服务定时去执行一个方法的三种方式
方式一:使用System.Timers.Timer定时器
public partial class Service1 : ServiceBase
{ private UnitOfWork unitOfWork;
private System.Timers.Timer timer1;//初始化一个定时器
LogHelper lghelper = new LogHelper(typeof(Service1));
public Service1()
{
InitializeComponent();
unitOfWork = new UnitOfWork();
this.timer1 = new System.Timers.Timer();
this.timer1.Interval = ;//设置定时器启动的时间间隔
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Elapsed);//定时器定时执行的方法
} protected override void OnStart(string[] args)
{
this.timer1.Enabled = true;//服务启动时开启定时器
lghelper.Info("服务启动");
} protected override void OnStop()
{
this.timer1.Enabled = false;//服务停止时关闭定时器
unitOfWork.Dispose();
lghelper.Info("服务停止");
} private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
this.timer1.Enabled = false;//在服务运行时关闭定时器,避免在服务还没有运行结束时达到定时器时间间隔又重头开始运行(比如该定时器设置为5分钟同步一次数据,当数据量很大时,5分钟同步不完,这时达到定时器时间间隔,又会重头开始同步,所以在服务开始运行时关闭定时器)
lghelper.Info("服务开始运行");
try
{ DoWork();
}
catch (Exception ex)
{
lghelper.Error(ex.ToString());
lghelper.Info("服务运行失败");
Thread.Sleep();
} this.timer1.Enabled = true;//服务运行结束,重新启动定时器
} }
方式二:使用Task
partial class Service2 : ServiceBase, IDisposable
{
LogHelper lghelper = new LogHelper(typeof(Service2));
private CancellationTokenSource TokenSource = new CancellationTokenSource();
protected UnitOfWork unitOfWork = new UnitOfWork(); Task MainTask;
public Service2()
{
InitializeComponent(); }
public void Dispose()
{
unitOfWork.Dispose();
} protected override void OnStart(string[] args)
{
lghelper.Info("开启服务!");
MainTask = Task.Factory.StartNew(() =>
{
while (true)
{
try
{
DoWork(); }
catch (Exception ex)
{
lghelper.Error(ex.ToString()); Thread.Sleep( * * );
} Thread.Sleep( * * );
} }); } protected override void OnStop()
{
if (MainTask != null)
{
if (MainTask.Status == TaskStatus.Running) { }
{
TokenSource.Cancel();
lghelper.Info("线程结束");
}
}
} }
方式三:这个方法是看到博友的,还没有用过,不过觉得挺方便的
http://www.cnblogs.com/ldyblogs/p/timer.html
使用Windows服务定时去执行一个方法的三种方式的更多相关文章
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...
- Java修炼——ArrayList常用的方法以及三种方式遍历集合元素。
List接口ArrayList用法详解 ArrayList常用方法: 1. List.add():添加的方法(可以添加字符串,常量,以及对象) List list=new ArrayList(); l ...
- Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因
1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作.下面是常用的三种指定特定操作的方法: 通过实现InitializingBea ...
- Js构造对象-添加方法的三种方式
Js构造函数添加方法有多种方案,来看一个混合方式构造函数的例子:申明person构造函数,有两个属性,name,qq.在原型上添加方法showname.这是最常用的方法. <script> ...
- Struts2学习(二)运行Action中方法的三种方式
1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写met ...
- vs 2010创建Windows服务定时timer程序
vs 2010创建Windows服务定时timer程序: 版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处: http://www.cnblogs.com/2186009311CFF/p/ ...
- Windows 10 应用创建模糊背景窗口的三种方法
原文 Windows 10 应用创建模糊背景窗口的三种方法 现代的操作系统中创建一张图片的高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统的原生支持了.iOS/Mac 和 Windo ...
- angularjs 自定义服务的三种方式
angularjs 中可通过三种($provider,$factory,$service)方式自定义服务,以下是不同的实现形式: // 定义module , module中注入$providevar ...
随机推荐
- C#学习笔记12
1.在使用反射时,反射可以绕过安全访问级别(private.protected)修饰的类或属性,来获取需要的信息. 2.泛型的反射:可以使用Type.ContainsGenericParameters ...
- laravel vue.js的使用
安装cors 地址:https://github.com/barryvdh/laravel-cors 在Kernel文件中加上 protected $middleware = [ \Barryv ...
- CRM——起步
一.CRM简介 crm 客户关系管理软件 ( Customer Relationship Management ). 二.CRM起步 1.设计表结构和数据库迁移 from django.db impo ...
- HTTP协议安全头部X-Content-Type-Options引入的问题
前段时间测试MM反馈了一个问题,在富文本编辑器里上传的图片无法正常呈现.因为Jackie在本机的环境上没有观察类似的现象,而恰好那天测试环境的某个重要配项被改错了,于是Jackie想当然的归类为配置项 ...
- (四)WebDriver常用方法
点击和输入 前面我们已经学习了定位元素, 定位只是第一步, 定位之后需要对这个元素进行操作, 或单击(按钮) 或输入(输入框) , 下面就来认识 WebDriver 中最常用的几个方法: clear( ...
- CSS z-index的用法
理清 position及z-index的用法: static : 无特殊定位,对象遵循HTML定位规则absolute : 将对象从文档流中拖出,使用left,right,top,bottom等属 ...
- June 17th 2017 Week 24th Saturday
Absence sharpens love, presence strengthens it. 相聚爱益切,离别情更深. There is almost no such love that can i ...
- [原]Android打包之Eclipse打包
Android自动打包流程详细图: 步骤一: 在工程中新建一个build.xml. 步骤二: 给工程配置ant工具. 选择ant工具的步骤如下: Windows->Shown view-> ...
- 设计模式——建造者模式(BuilderPattern)
建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. UML图: Builder: package com.cnblog.clarck; /** * ...
- 初学DLX
前言 \(DLX\),全称\(Dancing\ Links\ X\),即舞蹈链算法. 这是一个十分高效且实用的算法,它主要用于求出精确覆盖问题的一组解.(貌似重复覆盖问题也可以,但我不会\(2333\ ...