博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows Service下的Timer计时器的使用
阅读量:5318 次
发布时间:2019-06-14

本文共 1244 字,大约阅读时间需要 4 分钟。

在C#中提供了三种类型的计时器:

1、基于 Windows 的标准计时器(System.Windows.Forms.Timer)
2、基于服务器的计时器(System.Timers.Timer)
3、线程计时器(System.Threading.Timer)

一、基于 Windows 的标准计时器(System.Windows.Forms.Timer)

首先注意一点就是:Windows 计时器是为单线程环境设计的

此计时器从Visual Basic 1.0 版起就存在于该产品中,并且基本上未做改动
这个计时器是使用最简单的一种,只要把工具箱中的Timer控件拖到窗体上,然后设置一下事件和间隔时间等属性就可以了

二、基于服务器的计时器(System.Timers.Timer)

System.Timers.Timer不依赖窗体,是从线程池唤醒线程,是传统的计时器为了在服务器环境上运行而优化后的更新版本,在VS2008的工具箱中没有提供现成的控件,需要手工编码使用此计时器

三、线程计时器(System.Threading.Timer)

线程计时器也不依赖窗体,是一种简单的、轻量级计时器,它使用回调方法而不是使用事件,并由线程池线程提供支持。对消息不在线程上发送的方案中,线程计时器是非常有用的。

这里只对基于服务器的计时器做一下简单介绍,有兴趣的朋友可以查看相关资料;

第一次写这个windows服务程序时,我用的是第一种计时器,结果可想而知,没有达到我想要的结果,服务程序并没有听从我的指挥而乖乖得执行相应的功能,结果找了一些资料发现服务程序中建议不要使用 System.Windows.Forms.Timer 组件,因为它可能会产生不可预料的“罢工”问题;应使用System.Timer 组件;缺点是它和System.Windows.Forms.Timer不同,它需要手工编写事件,它是使用Elapsed事件

代码实现时这样的:
 System.Timers.Timer timer = new System.Timers.Timer(600000);
 protected override void OnStart(string[] args)
        {           
            timer.Elapsed+=new System.Timers.ElapsedEventHandler(timer_Elapsed);//使用Elapsed事件,其中timer_Elapsed就是你需要处理的事情

            timer.AutoReset = true;

            timer.Enabled = true;
        }
 private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            ///
            ///   功能代码
            ///
        }

转载于:https://www.cnblogs.com/zagelover/articles/4185192.html

你可能感兴趣的文章
c++返回引用是否是真的引用
查看>>
flask中jinjia2模板引擎使用详解1
查看>>
【USACO15JAN】草鉴定Grass Cownoisseur(缩点+分层图?)
查看>>
C# 颜色和整型值转换
查看>>
Web安全学习笔记(六):JavaScript基础
查看>>
Compilation failed: internal java compiler error
查看>>
@bzoj - 3750@ [POI2015] Pieczęć
查看>>
PHP定时任务
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
jequery动态创建form
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
第六次java作业
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
tweenlite使用说明
查看>>
ContentProvider数据访问详解
查看>>
java中遍历属性字段及值(常见方法)
查看>>
在iPhone应用中使用自定义字体
查看>>