总结以下三种方法,实现c#每隔一段时间执行代码:

方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间;

方法二:使用System.Timers.Timer类;

方法三:使用System.Threading.Timer,值得注意的是一定要声明成全局变量以保持对Timer的引用,否则会被垃圾收集器回收!

完整Demo如下:

using System;
using System.Collections;
using System.Threading; public class Test
{
  private System.Threading.Timer threadTimer;  //在使用System.Threading.Timer(方法三)时,一定要声明成全局变量以保持对Timer的引用,否则会被垃圾收集器回收! public static void Main()
{
Test obj = new Test();
Console.WriteLine(Thread.CurrentThread.ManagedThreadId.ToString()); //方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间
Thread thread = new Thread(new ThreadStart(obj.Method1));
thread.Start(); //方法二:使用System.Timers.Timer类
System.Timers.Timer t = new System.Timers.Timer();//实例化Timer类,设置时间间隔
t.Elapsed += new System.Timers.ElapsedEventHandler(obj.Method2);//到达时间的时候执行事件
t.AutoReset = true;//设置是执行一次(false)还是一直执行(true)
t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件
while (true)
{
Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString());
Thread.Sleep();
} //方法三:使用System.Threading.Timer
//Timer构造函数参数说明:
//Callback:一个 TimerCallback 委托,表示要执行的方法。
//State:一个包含回调方法要使用的信息的对象(即回调方法的参数),或者为空引用(Visual Basic 中为 Nothing)。
//dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
//Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
threadTimer = new System.Threading.Timer(new System.Threading.TimerCallback(obj.Method3), null, , );
while (true)
{
Console.WriteLine("test_" + Thread.CurrentThread.ManagedThreadId.ToString());
Thread.Sleep();
} Console.ReadLine();
} void Method1()
{
while (true)
{
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
Thread.CurrentThread.Join();//阻止设定时间
}
} void Method2(object source, System.Timers.ElapsedEventArgs e)
{
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
} void Method3(object state)
{
Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
}
}

C#实现每隔一段时间执行代码(多线程)的更多相关文章

  1. 【C#-多线程】实现每隔一段时间执行代码(多线程) 3种定时器

    总结以下三种方法,实现c#每隔一段时间执行代码: 方法一:调用线程执行方法,在方法中实现死循环,每个循环Sleep设定时间: 方法二:使用System.Timers.Timer类: 方法三:使用Sys ...

  2. delphi中我用定时器每隔一段时间执行操作

    delphi中,我用定时器每隔一段时间执行数据库插入及更新工作!adoquery.close;adoquery.sql.cleare;adoquery.connection:=con1;adoquer ...

  3. JS Window对象 计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码。

    计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...

  4. 每隔一段时间执行一次函数。window.setTimeout

    timer2 = window.setTimeout("showTaxi()", 30000);//30秒从后台获取一次数据,显示在地图上. 原来试过  setInterval . ...

  5. 如何在JAVA中每隔一段时间执行一段程序

    可以用线程来做,每隔几秒开一个线程代码如下 public void runTask() { final long timeInterval = 120000;// 两分钟运行一次 final Thre ...

  6. IOS在后台每隔一段时间执行一下

    步骤: 1.在info.plist里加入UIBackgroundModes键,其值为数组,数组之一为voip字符串: <key>UIBackgroundModes</key>& ...

  7. js每隔一段时间执行函数

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. js setInterval每隔一段时间执行一次

    js setInterval每隔一段时间执行一次setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval() 方法会不停地调用函数,直到 clearI ...

  9. worker 启动时向 etcd 注册自己的信息,并设置一个带 TTL 的租约,每隔一段时间更新这个 TTL,如果该 worker 挂掉了,这个 TTL 就会 expire 并删除相应的 key。

    1.通过etcd中的选主机制,我们实现了服务的高可用.同时利用systemd对etcd本身进行了保活,只要etcd服务所在的机器没有宕机,进程就具备了容灾性. https://mp.weixin.qq ...

随机推荐

  1. CentOS 6.3下配置LVM(逻辑卷管理)

    一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵 ...

  2. 修改/etc/profile文件

    通常情况下,/etc/profile文件是只读的,直接用vi或gedit打开修改后是无法保存的.要修改profile,需要取得root权限,(使用gedit编辑)应该如下: $sudo gedit / ...

  3. WcfDataService with EntityFramework 6 的若干问题

    1.Microsoft.Data.Edm等NuGet包需要升级到5.6版本 2.SVC不要使用DataService基类 class WcfDataService1 : DataService< ...

  4. Codeforces 549B. Looksery Party[构造]

    B. Looksery Party time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. 第8章 用户模式下的线程同步(2)_临界区(CRITICAL_SECTION)

    8.4 关键段(临界区)——内部也是使用Interlocked函数来实现的! 8.4.1 关键段的细节 (1)CRITICAL_SECTION的使用方法 ①CRITICAL_SECTION cs;   ...

  6. sqlmap小白操作

    转载地儿:http://blog.csdn.net/zgyulongfei/article/details/41017493 对于网络安全人员来说,掌握渗透工具的使用方法是一项必备的技能.然而,一个没 ...

  7. 百度搜索--jquery

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  8. HTML-学习笔记(1)

    HTML元素 HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 大多数HTML元素可以嵌套(可以包含其他的HTML元素) HTML 文档由嵌套的 HTML ...

  9. js双层动画幻灯

    js双层动画幻灯 点击下载

  10. vuejs全局api

    全局api set 增加数组 vm.$set 实例化方法 全局api delete 删除数组 vm.$delete 实例化方法 全局 api 组件component 实例化方法 components ...