这段时间做项目需要引入线程和Timer触发器,现整理下我的学习心得。

1。Timer触发机制:

    可应用的场合很多,比如项目管理中的里程碑提示和检查点的提醒,都是到了某个时间触发某事件。现在我已发现了三种类型的Timer,分别是System.Threading.Timer,System.Timers.Timer,System.Windows.Forms.Timer(还请大侠指点这三种类型区别).如下是比较有代码性的代码,每隔一秒在标签上显示次时间,使用System.Windows.Forms.Timer:

////////////////////////////////////////////////
using System;
using System.Windows.Forms;
using System.Threading

//变量声明
......
private System.Windows.Forms.Label lbTime;//用一个label来显示时间
private System.Windows.Forms.Timer Clock=new System.Windows.Forms.Timer(); 

......
public Form1()
{
//
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
   
   Clock.Interval=1000;   
   Clock.Start();   
   Clock.Tick+=new EventHandler(Timer_Tick);//绑定事件
   
   this.Controls.Add(lbTime);   
}

public void Timer_Tick(object sender,EventArgs eArgs)
  {   
   if(sender==Clock)  
   {     
    lbTime.Text=GetTime();    
    //MessageBox.Show(GetTime());
   }
  }
//GetTime代码
 public string GetTime() 
   {  
    string TimeInString="";  
    int hour=DateTime.Now.Hour;   
    int min=DateTime.Now.Minute;  
    int sec=DateTime.Now.Second;  
    TimeInString=(hour < 10)?"0" + hour.ToString() :hour.ToString();    TimeInString+=":" + ((min<10)?"0" + min.ToString() :min.ToString());    TimeInString+=":" + ((sec<10)?"0" + sec.ToString() :sec.ToString());
    //label1.Text= TimeInString;
   return TimeInString;
   } 
一运行窗体,时间每个一秒,就会触发显示当前时间的事件。


 2.线程中的事件回调可以实现相同的效果,但因为开了线程,估计资源占用会更少,效率更高。
//控制台程序,选自SDK/samples/technologies/Threadings/Timer
using System;
using System.Threading;


class App {
   public static void Main() {
      Console.WriteLine("Checking for status updates every 2 seconds.");
      Console.WriteLine("   (Hit Enter to terminate the sample)");
      Timer timer = new Timer(new TimerCallback(GetTime), null, 0, 2000);
      Console.ReadLine();
      timer.Dispose();
   }


   // The callback method's signature MUST match that of a System.Threading.TimerCallback
   // delegate (it takes an Object parameter and returns void)
   static void GetTime(Object state) {
    string TimeInString="";  
    int hour=DateTime.Now.Hour;   
    int min=DateTime.Now.Minute;  
    int sec=DateTime.Now.Second;  
    TimeInString=(hour < 10)?"0" + hour.ToString() :hour.ToString();    TimeInString+=":" + ((min<10)?"0" + min.ToString() :min.ToString());    TimeInString+=":" + ((sec<10)?"0" + sec.ToString() :sec.ToString());
    Console.WriteLine(TimeInString);
   }
}

如注释所言,将GetTime()函数该为GetTime(Object state)
/////////////////////////////////////////////////////////////////////////////////////////////////
//其他:
Thread ,ThreadPool,Timer的区别与联系;
From:http://zhangjjwm.cnblogs.com/archive/2006/05/26/409859.html
            Visual C#中的多线程编程