c#实现每隔规定时间自动执行程序代码

 在一般的项目中我们很少用到c#实现每隔规定时间自动执行程序代码,但是如果你经历的项目多,或者应用程序做的比较多的话,c#实现每隔规定时间自动执行程序代码就用的比较多。像玩网游做挂机定时发布广告这样的项目中就用到了c#实现每隔规定时间自动执行程序代码。
 
25亿企业网站管理系统在多年运营seo方面,就用到了自动执行代码,现在给大家讲解一下c#实现每隔规定时间自动执行程序代码。
 
在实践应用中我们可以用三种方法来实现。
 
//方法一:调用Thread线程执行方法,在执行方法中实现死循环,在每个循环Sleep里设定时间 
Thread thread25yi = new Thread(new ThreadStart(obj.MethodTimer1)); 
thread25yi.Start(); 
void MethodTimer1() 
while (true) 
Console.WriteLine(DateTime.Now.ToString() + "_" + thread25yi.CurrentThread.ManagedThreadId.ToString()); 
thread25yi.CurrentThread.Join(100);//阻止设定时间 
 
 
方法二:使用System.Timers.Timer类 
System.Timers.Timer t25yi = new System.Timers.Timer(100);//实例化Timer类,设置时间间隔为100毫秒
t25yi.Elapsed += new System.Timers.ElapsedEventHandler(obj.MethodTimer2);//当到达时间的时候执行MethodTimer2事件 
t25yi.AutoReset = true;//false是执行一次,true是一直执行
t25yi.Enabled = true;//设置是否执行System.Timers.Timer.Elapsed事件 
while (true) 
Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString()); 
Thread.Sleep(100); 
void MethodTimer2(object source, System.Timers.ElapsedEventArgs e) 
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString()); 
}
   
 
方法三:使用System.Threading.Timer  
System.Threading.Timer threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(obj.MethodTimer3), null, 0, 100); 
while (true) 
Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString()); 
Thread.Sleep(100); 
}  
void MethodTimer3(Object state) 
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString()); 
Timer构造函数参数说明: 
Callback是一个 TimerCallback 委托,表示要执行的方法。 
State是一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。 
dueTime是调用 callback 之前延迟的时间量(以毫秒为单位),指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。 
Period是调用 callback 的时间间隔(以毫秒为单位),指定 Timeout.Infinite 可以禁用定期终止。
 
上述方法中用timer有一个弊端,就是当timer间隔时间内,事件没执行完,timer就会新建一个线程,从头开始执行这个事件,而上一个线程继续执行,这样就会出现,系统中线程n多,说不定一会儿系统的资源就耗尽了。

c#实现每隔规定时间自动执行程序代码的更多相关文章

  1. C# 自动运行代码 (创建windows 服务的形式 )

    本文转载自:http://blog.csdn.net/csethcrm/article/details/17917721 1.      新建项目 1.1 右键解决方案 – 添加 – 新建项目 1.2 ...

  2. windows本地自动集成代码+SSH服务器配置

    在windows环境下使用Jenkins自动集成代码 描述: 局域网电脑A是本地服务器,安全win7系统,安装了Jenkins:现在想让A成为测试服务器,需要隔一段时间从SVN里同步出最新的代码,供客 ...

  3. web容器启动后自动执行程序的几种方式比较

    1.       背景 1.1.       背景介绍 在web项目中我们有时会遇到这种需求,在web项目启动后需要开启线程去完成一些重要的工作,例如:往数据库中初始化一些数据,开启线程,初始化消息队 ...

  4. mybatis generator maven插件自动生成代码

    如果你正为无聊Dao代码的编写感到苦恼,如果你正为怕一个单词拼错导致Dao操作失败而感到苦恼,那么就可以考虑一些Mybatis generator这个差价,它会帮我们自动生成代码,类似于Hiberna ...

  5. java如何在eclipse编译时自动生成代码

    用eclipse写java代码,自动编译时,如何能够触发一个动作,这个动作是生成本项目的代码,并且编译完成后,自动生成的代码也编译好了, java编辑器中就可以做到对新生成的代码的自动提示? 不生成代 ...

  6. Eclipse保存文件时自动格式化代码

    实现效果:Ctrl+S会自动格式化并保存代码. 应用上图所示效果之后,在每次对Eclipse保存的时候都会实现自动格式化代码. 1. Fomated All lines,格式化该文件的所有代码:还是 ...

  7. MyBatis自动生成代码示例

    在项目中使用到mybatis时,都会选择自动生成实体类,Mapper,SqlMap这三个东东. 手头上在用的又不方便,找了下网上,其实有很多文章,但有些引用外部文件时不成功,也不方便,所以重新整理了下 ...

  8. 使用MyBatis Generator自动创建代码

    SSM框架--使用MyBatis Generator自动创建代码 1. 目录说明 使用自动生成有很多方式,可以在eclipse中安装插件,但是以下将要介绍的这种方式我认为很轻松,最简单,不需要装插件, ...

  9. Excel每隔两行自动求和一次怎么操作?

    今天ytkah得到一份数据,要求进行统计分析,由于是原始数据,还没处理过,数据量有点大,如下图所示(Excel每隔两行自动求和),每天的数字由两项组成,男生的人数.消费值和女生的人数和消费值,数字都在 ...

随机推荐

  1. Linux命令(18)查看当前用户who、whoami、who am i

    首先看命令的使用情况: [@sjs_9_108 ~]$ whoami spider [@sjs_9_108 ~]$ who am i spider pts/ -- : (192.168.1.1) [@ ...

  2. EasyUI-draggable

    draggable用来在界面上创建一个可以拖动的元素,既然是可以拖动的元素,那么它在拖动过程中会有下面的几个事件:onBeforeDrag.onStartDrag.onDrag.onStopDrag. ...

  3. 深入分析ConcurrentHashMap(转)

    线程不安全的HashMap 因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码 final HashMap ...

  4. Laravel 部署安装到虚拟主机的方法(折腾了一周,终于成功部署,原来是虚拟机不加载.env,谢谢莫回首http://lxl520.com/index.php/archives/88/!)

      作者:莫回首链接:https://www.zhihu.com/question/35497879/answer/111241182来源:知乎著作权归作者所有,转载请联系作者获得授权. 序 lara ...

  5. Java中的注解是如何工作的?--annotation学习一

    自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述 ...

  6. memcached客户端的使用

    一. 概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二. 适用场合 1. 分布式应用 ...

  7. Python基础08 面向对象的基本概念

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢逆水寒龙,topmad和Liqing纠错 Python使用类(class)和对 ...

  8. 根据职位名,自动生成jd

    代码本身就是最好的解释,不赘述. 文本聚类输出: cluster.py #!/usr/bin/env python # coding=utf-8 import jieba,re from gensim ...

  9. jQuery 常见操作实现方式

    一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘. jQuery 常见操作实现方式 $("标签名") //取html元素 document. ...

  10. Ubuntu下删除配置错误或者失败的安装包

    aptitude purge $(dpkg -l|grep ^rc|awk '{ print $2 }') 解释:dpkg -l 列出系统中所有安装的软件,如果是已经删除的软件(有残存的配置文件),那 ...