这段时间做项目需要引入线程和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#中的多线程编程