方式一:使用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服务定时去执行一个方法的三种方式的更多相关文章

  1. js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式

    js replace 全局替换   js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...

  2. uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

    前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...

  3. Java修炼——ArrayList常用的方法以及三种方式遍历集合元素。

    List接口ArrayList用法详解 ArrayList常用方法: 1. List.add():添加的方法(可以添加字符串,常量,以及对象) List list=new ArrayList(); l ...

  4. Spring管理的bean初始化方法的三种方式,以及@PostConstruct不起作用的原因

    1:Spring 容器中的 Bean 是有生命周期的,spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作.下面是常用的三种指定特定操作的方法: 通过实现InitializingBea ...

  5. Js构造对象-添加方法的三种方式

    Js构造函数添加方法有多种方案,来看一个混合方式构造函数的例子:申明person构造函数,有两个属性,name,qq.在原型上添加方法showname.这是最常用的方法. <script> ...

  6. Struts2学习(二)运行Action中方法的三种方式

    1.运行execute()方法 一般的能够直接在action中书写execute,调用action时会自己主动运行此方法 2.配置method方法 在struts.xml中配置action时.写met ...

  7. vs 2010创建Windows服务定时timer程序

    vs 2010创建Windows服务定时timer程序: 版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:  http://www.cnblogs.com/2186009311CFF/p/ ...

  8. Windows 10 应用创建模糊背景窗口的三种方法

    原文 Windows 10 应用创建模糊背景窗口的三种方法 现代的操作系统中创建一张图片的高斯模糊效果非常容易,不过如果要在窗口中获得模糊支持就需要操作系统的原生支持了.iOS/Mac 和 Windo ...

  9. angularjs 自定义服务的三种方式

    angularjs 中可通过三种($provider,$factory,$service)方式自定义服务,以下是不同的实现形式: // 定义module , module中注入$providevar ...

随机推荐

  1. Windows server 搭建ftp服务器

    1.安装ftp 2.端口端口21和20的入出端口 3.点击IIS 服务器证书 4.FTP界面上选择“FTP身份验证”——>“基本身份验证”–>”启用” 5.FTP界面选择 “FTP授权规则 ...

  2. 2018.10.17NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 +100\) 实际得分:\(100 + 100 + 60\) 辣鸡模拟赛.. 5min切掉T1,看了一下T2 T3,感觉T3会被艹爆因为太原了.. 淦了20 ...

  3. vue1.0 与 Vue2.0的一些区别 及用法

    1.Vue2.0的模板标记外必须使用元素包起来: eg:Vue1.0的写法 <!DOCTYPE html> <html> <head> <meta chars ...

  4. 关于i 标签盛放背景图像

    1.html部分 <div class="hover right"> <i class="log_change state_psd">& ...

  5. Flowchart

    1. 工具可使用 https://www.processon.com 2.

  6. ViewPager+handler实现轮播

    先说下功能吧,随便设置一个网络图片链接的集合,作为图片的资源.我用ImageLoader来加载图片,在图片未加载完成时会ProgressBar加载状态 在Handler发送一个空消息来实现页面的轮播 ...

  7. matlab练习程序(Ritter‘s最小包围圆)

    原始算法是sphere,我这里简化为circle了. Ritter's求最小包围圆为线性算法,因为非常简单,所以应用非常广泛. 该算法求出的圆比最优圆大概会大个5%到20%左右,求最优圆应该可以用Bo ...

  8. 常见WEB开发安全漏洞 原因分析及解决

    目 录 1 会话标识未更新 3 1.1 原因 3 1.2 解决 3 2 SQL注入 3 2.1 原因 3 2.2 解决 5 3 XSS跨站脚本编制 5 3.1 原因 5 3.2 解决 5 4 XSRF ...

  9. mysql 5.7版本如何修改密码

    这是官方截图,mysql5.7安装后,会有一个默认密码,保存在mysql.log里面,找的他,并更改 官方文档地址 https://dev.mysql.com/doc/refman/5.7/en/li ...

  10. 2.LVS配置过程

    请查看我的有道云笔记: http://note.youdao.com/noteshare?id=866edb5736418d29c86d68b5198c5c1c&sub=66F88F0A24D ...