C#中实现计时器功能(定时任务和计时多长时间后执行某方法)_ba_wang_mao的博客-程序员宝宝_c# 设定定时器一天

技术标签: C#  

场景

在低液位预警弹窗点击确定后需要实现一个计时器,比如在五分钟后再执行监控。

实现思路是使用Timer然后每秒执行一个方法,在方法中对秒数进行减1操作,等倒计时结束后执行相应的操作。

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载

实现

但是Timer有三个

1.定义在System.Windows.Forms里  
2.定义在System.Threading.Timer类里  
3.定义在System.Timers.Timer类里

一开始使用的是System.Windows.Forms里面的

System.Windows.Forms.Timer是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中的Timer控件,内部使用API  SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console  Application(控制台应用程序)无法使用。

使用代码示例:

新建定时器类对象

System.Windows.Forms.Timer _timer = new System.Windows.Forms.Timer();

设置执行的间隔时间,单位毫秒

_timer.Interval = 1000;

设置间隔时间内执行的方法

_timer.Tick +=_timer_Tick;
private void _timer_Tick(object sender, EventArgs e)
   {
        //执行的业务
    }

启动计时器

_timer.Start();

停止计时器 

_timer.Stop();

但是发现此定时器并不执行,其每秒执行一次的方法不执行,原来其在控制台程序中没法使用

所以改为了System.Timers.Timer

新建定时器对象并设置执行的间隔时间为1秒

System.Timers.Timer _timerWaterTank = new System.Timers.Timer(1000);//实例化Timer类,设置间隔时间为1000毫秒;  

 设置定时器的执行事件

_timerWaterTank.Elapsed += new System.Timers.ElapsedEventHandler(_timerWaterTank_Tick);//到达时间的时候执行事件;

设置是执行一次还是一直执行

_timerWaterTank.AutoReset = true;//设置是执行一次(false)还是一直执行(true);

具体执行的事件方法

private void _timerWaterTank_Tick(object sender, EventArgs e)
            {
                System.Timers.Timer timer = sender as System.Timers.Timer;
                //要计时的时间秒数
                this.LowLevelSecondsWaterTank--;
                if (this.LowLevelSecondsWaterTank <= 0)
                {
                    //倒计时结束后执行的业务
                    Global.PublicVar.Instance.IsGoOnMonitorWaterPool = true;
                    timer.Enabled = false;
                    this.LowLevelSecondsWaterTank = Global.LOW_LEVEL_MONITOR_SECONDS;
                    
                }
            }

这样让定时器一秒执行一次方法,在此方法中将秒数减1,这样在秒数到0的时候执行具体的业务。

启动定时器

timer.Enabled = true;

停止计时器

timer.Enabled = false;

https://www.cnblogs.com/badaoliumangqizhi/p/12935552.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ba_wang_mao/article/details/107735988

智能推荐

编译rbx1时遇到错误_乘凉~的博客-程序员宝宝

/home/acl/rbx1/build/rbx1_nav/setup_custom_pythonpath.sh: 5: exec: /home/acl/rbx1/src/rbx1_nav/cfg/CalibrateAngular.cfg: Permission denied/home/acl/rbx1/build/rbx1_nav/setup_custom_pythonpath.sh: 5: exec: /home/acl/rbx1/src/rbx1_nav/cfg/CalibrateLinear.cf

iOS NSDictionary(字典)~实现原理[email protected]虎哥132的博客-程序员宝宝_哈希表 字典

   联系人:石虎 QQ:1224614774  昵称: 嗡嘛呢叭咪哄                      QQ群:807236138  群称: iOS 技术交流学习群 一、NSDictionary使用原理    1.NSDictionary(字典)是使用 hash表来实现key和value之间的映射和存储的, hash函数设计的好坏影响着数据的查找访问效率。    -...

tesseract的安装使用及配置问题解决_Alexa2077的博客-程序员宝宝_tesseract

tesseract的安装使用及配置问题解决一、安装tesseract二、配置环境变量三、cmd方式中出现的问题及解决方法四、 pycharm方式中出现的问题及解决办法五、验证结果一、安装tesseract1,OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。2,tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/3,如下图所示,将下载之后

一些初级小问题_dazhi0529的博客-程序员宝宝

项目完成,就拿来前段时间修改的一些项目总结一下,发现还是有很多值得我在重新的整理一下的,这就来啦,嘿嘿. 一.正则表达式的替代 替换是只能在替换模式中识别的语言元素。 它们使用正则表达式模式定义全部或部分用于替换输入字符...

python 当前日期_python 当前时间获取方法_weixin_39957027的博客-程序员宝宝

1.先导入库:import datetime2.获取当前日期和时间:now_time = datetime.datetime.now()3.格式化成我们想要的日期:strftime()比如:“2016-09-21”:datetime.datetime.now().strftime('%Y-%m-%d')4.在当前时间增加1小时:add_hour=datetime.datetime.now()+da..._1671465600

codeforces edu 107 div2__Koto的博客-程序员宝宝

A.A找1和3的个数就可;#include &lt;iostream&gt;#include &lt;algorithm&gt;using namespace std;int a[100];int main() { int t; cin &gt;&gt; t; while (t--) { int n; cin &gt;&gt; n; int cnt1 = 0; for (int i = 1; i &lt;= n; i++) { cin &gt;&gt; a[i];

随便推点

使用cgo的程序如何交叉编译_hejingdong123的博客-程序员宝宝_cgo交叉编译

背景最近在研究读取配置相关的开源项目–libconfig。libconfig项目目前仅支持c版本和c++版本。我们当前项目是用golang编写的,于是就想通过cgo的方式调用libconfig里面的功能。刚开始一切顺利,分别编译libconfig的windows版本库和linux版本库;分别在windows环境和linux环境下写DEMO程序,这些都没有任何问题。问题出现由于,我们开发环境在...

MCollective架构篇4-MCollective各种插件的部署及测试_weixin_34015860的博客-程序员宝宝

零基础学习Puppet自动化配置管理系列文档MCollective只是一个框架,如果需要在上面发挥各种作用,那就需要各种插件的支持。官方提供了很多这方面的插件,除此之外,还有第三方的插件,比如shell插件等,下面会介绍各种插件的安装,以及插件之间如何组合进行使用。1、在mcollective client端和server端安装各种官网plugins首先去官网下载各个插件 h...

SDRAM容量计算_青山碧水的博客-程序员宝宝

行地址12位,列地址8位,数据16位,片内有四个组。 那么这块芯片的容量大小是多少?怎么计算的?具体计算如下行地址12位,说明行数是2的12次方列地址8位,说明列数是2的8次方数据数就有2的20次方每个数据16位,就是2字节(B)所以是2的20次方字节,就是1MB2字节(B)*1MB=2MB片内有4组,所以总容量4*2MB=8MB

opc服务找不到远程计算机,opc远程找不到服务器_weixin_39748928的博客-程序员宝宝

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情区域和可用区||https://support.huaweicloud.com/productdesc-ecs/zh-cn_topic_0186645877.html...

我爱Java系列---【Cookie和Session】_weixin_30912051的博客-程序员宝宝

一、四大域对象所对应的的对象域对象存取用法(Servlet存—&gt;jsp取)request.getRequestDispatcher("/demo06.jsp").forward(request, response);...

滚动条宽度到底是多少?(转_weixin_30613343的博客-程序员宝宝

相信不管是web前端还是后台的程序员,都讨厌网页水平方向出现滚动条。而要避免出现水平滚动条,计算宽度是必不可少的。而在设计过程中,设计师一般避免计算这个右侧滚动条的宽度。为了避免出现水平滚动条,而将宽度设为比具体分辨率少五六十像素的宽度。如YUI推荐的宽度750px对800*600的分辨率,950px或974px对1024*768的分辨率。一般认为:这个滚动条的宽度为20px,那窗口右侧...