- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading;
- namespace ConsoleApplication1
- {
- class CStatusChecker
- {
- //执行次数计数,初始为0,内部使用
- private int m_nInvoikeCount = 0;
- //所需要执行的最大次数
- private int m_nMaxCount;
- public int MaxCount
- {
- get{return m_nMaxCount;}
- }
- public CStatusChecker(int count)
- {
- m_nMaxCount = count;
- }
- //状态检查函数
- public void CheckStatus(object stateInfo)
- {
- AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
- Console.WriteLine("{0} 检查正在在进行 第{1}次.", DateTime.Now.ToString("HH:mm:ss.fff"), m_nInvoikeCount.ToString());
- m_nInvoikeCount++;
- //检查是不已经完成
- if (m_nInvoikeCount == m_nMaxCount)
- {
- m_nMaxCount = 0;
- //设置事件通知
- autoEvent.Set();
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- //时间对象,用于检查线程之间通信
- AutoResetEvent autoEvent = new AutoResetEvent(false);
- //构造检查对象,指定执行10次任务
- CStatusChecker objChecker = new CStatusChecker(50);
- //创建委托,指定任务所需要执行的方法
- TimerCallback objCallback = new TimerCallback(objChecker.CheckStatus);
- //启动定时器
- Console.WriteLine("{0} 检查工作开始,共{1}次.", DateTime.Now.ToString("HH:mm:ss:fff"), objChecker.MaxCount);
- //在一秒种后触发,以后每两秒执行一次
- Timer objTimer = new Timer(objCallback, autoEvent, 1000, 2000);
- //等待任务结束,如果10秒钟还未结束视为超时
- autoEvent.WaitOne(10000, false);
- //修改定时器间隔,改为1秒一次
- objTimer.Change(0, 100);
- autoEvent.WaitOne(30000, false);
- //释放定时器占有的资源
- objTimer.Dispose();
- Console.WriteLine("{0} 检查工作结束.", DateTime.Now.ToString("HH:mm:ss:fff"));
- Console.Read();
- }
- }
- }
C# 控制台程序下,如何启用Timer 及多次调用后如何更改周期
最新推荐文章于 2024-05-07 10:41:43 发布