代码如下 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(); } } }