使用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 ...
随机推荐
- 在windows上用netsh动态配置端口转发
使用多个虚拟机,将开发环境和工作沟通环境分开(即时通,办公系统都只能在windows下使用…),将开发环境的服务提供给外部访问时,需要在主机上通过代理配置数据转发. VirtualBox提供了端口转发 ...
- 关于easyui 窗口位置的调整
(一)easyui 默认的窗口位置 浏览器中间 (二)可直接在style里进行更改 <div id="news_dialog" class="easyui-wind ...
- OAuth2.0 入门与进阶
一.基础知识 1.OAuth产生背景 很多网站.APP 弱化甚至没有搭建自己的账号体系,而是直接使用社会化登录的方式,这样不仅免去了用户注册账号的麻烦.还可以获取用户的好友关系来增强自身的社交功能. ...
- CentOS安装QQ2012
QQ想必大家都会用,在windows系统下一般都是使用客户端软件,但是在linxu系统下就没有想windows那样的客户端了.下面就次啊用wine在CentOS中安装腾讯QQ2012.
- RecycleView + SwipeRefreshLayout 实现下拉刷新和底部自动加载
前段时间项目里面使用了RecycleView 但是里面的刷新和加载都是框架里面封装好的,直接使用 这几天比较闲就自己来实现以下. 因为SwipeRefreshLayout是一个下拉刷新控件所有直接和R ...
- LAMP专业术语的规范书写格式
DIV+CSS(技术) MySQL(数据库) Sphinx(中文分词技术) JavaScript(语言) MySQLi(MySQL数据库连接方式) MongoDB(NoSQL数据库) Ajax(Jav ...
- 向jsp页面传值时出现乱码
在一个html页面中用表单向jsp页面传值: 这是html页面 <html> <head> <title>MyBeans.html</title> &l ...
- Azure进阶攻略丨Azure网络通不通,PsPing&PaPing告诉你答案
很多时候,为了解决一些问题,要查各种文档,很麻烦你造吗!做「伸手党」又容易被鄙视,这时候就需要用到[Azure 进阶攻略]啦!特此,我们推出关于 Azure 常用操作指南的系列文章,每篇涉及一个 Az ...
- 关于git的认识与想法
1.什么是git: Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.Git的读音为/gɪt/. Git是一个 ...
- 关于selenium无法定位动态元素的解决方法
今天在写一个关于登录的自动化脚本时,在对元素定位时总会报下面的错: