本文实例讲述了C#自定义基于控制台的Timer实现方法。分享给大家供大家参考。具体如下:
一、概述
这里实现了一个自定义类TimerTest,该类可以模拟一个Timer,经过指定时间间隔执行某个事件。
二、TimerTest类
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
68
69
|
//定时器类 class TimerTest { //线程名 string _ThreadName; public string ThreadName { get { return _ThreadName; } private set { _ThreadName = value; } } //时间间隔 int _TimeInterval; public int TimeInterval { get { return _TimeInterval; } set { _TimeInterval = value; } } //当前计时器是否启用 true:启用 false:不启用 bool _Enabled; public bool Enabled { get { return _Enabled; } set { _Enabled = value; } } //每隔一段时间需要运行的事件 public delegate void TickEventHandler(); public event TickEventHandler TickEvent; /// <summary> /// 建立一个计时器(构造函数) /// </summary> /// <param name="ThreadName">线程名</param> /// <param name="TimeInterval">时间间隔</param> public TimerTest( string ThreadName, int TimeInterval = int .MaxValue) { this .ThreadName = ThreadName; this .TimeInterval = TimeInterval; this .Enabled = false ; } /// <summary> /// 定期执行事件 /// </summary> public void Run() { while ( true ) { //如果当前计时器并未启用,则每隔一段时间检测是否被启用 if (! this .Enabled) { Thread.Sleep(100); continue ; } //触发事件TickEvent if (TickEvent != null ) { TickEvent(); } //休眠一定的时间,等待下一个循环 Thread.Sleep(TimeInterval % 100); for ( int temp = 0; temp < TimeInterval / 100; temp++) { Thread.Sleep(100); if (! this .Enabled) { break ; } } } } } |
三、调用示例
每1000毫秒输出当前的时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/// <summary> /// 测试用事件 /// </summary> static void TestHandler() { //TODO Console.WriteLine(DateTime.Now.ToLongTimeString()); } static void Main( string [] args) { TimerTest tt = new TimerTest( "timer_test" , 1000); tt.Enabled = true ; tt.TickEvent += TestHandler; Thread timer = new Thread(tt.Run); timer.Start(); Console.ReadLine(); } |
四、运行结果
希望本文所述对大家的C#程序设计有所帮助。