c#实现每隔一段时间执行代码(多线程)

52 篇文章 1 订阅

c#实现每隔一段时间执行代码(多线程)

2010-08-31 17:53 by 田志良, 26659 阅读, 5 评论, 收藏编辑

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

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

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

方法三:使用System.Threading.Timer;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using  System;
using  System.Collections;
using  System.Threading;
 
public  class  Test
{
 
     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(100); //实例化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(100);
         }
 
 
         //方法三:使用System.Threading.Timer
         //Timer构造函数参数说明:
         //Callback:一个 TimerCallback 委托,表示要执行的方法。
         //State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
         //dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
         //Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
         System.Threading.Timer threadTimer = new  System.Threading.Timer( new  System.Threading.TimerCallback(obj.Method3), null , 0, 100);
         while  ( true )
         {
             Console.WriteLine( "test_"  + Thread.CurrentThread.ManagedThreadId.ToString());
             Thread.Sleep(100);
         }
 
         Console.ReadLine();
     }
 
 
     void  Method1()
     {
         while  ( true )
         {
             Console.WriteLine(DateTime.Now.ToString() + "_"  + Thread.CurrentThread.ManagedThreadId.ToString());
             Thread.CurrentThread.Join(100); //阻止设定时间
         }
     }
 
 
     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());
     }
}
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值