浅谈C#中的多线程编程[3]
时间:2011-03-09 来源:Ellic
之前复习了有关Thread类的相关知识,最后复习下有关定时器Timer的使用方法。
Timer类的继承层次为System.Object-System.MarshallByRefObject,其构造函数有下面的几种重载方式:
Timer类是一个定时器,定时执行用户指定的函数,当定时器启动后,系统自动建立一个新的线程,执行指定的函数,我们可以通过下面的方式来初始化一个Timer对象:
Timer timer = new Timer(timerDelfgate,obj,0,1000);
第一个参数是TimerCallback委托,表示要执行的方法;
第二个参数是一个包含回调方法要使用的信息的对象,可以为空引用;
第三个参数是延迟执行的时间,单位是毫秒,若为"0",表示立即开始。
第四个参数是指定时器的时间间隔,每隔那么长的一段时间,TimerCallBack所代表的方法将被调用一次,单位是毫秒。
Timer类所持有的方法如下:
下面是Timer类的示例代码:
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
// Create an event to signal the timeout count threshold in the
// timer callback.
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);
// Create an inferred delegate that invokes methods for the timer.
TimerCallback tcb = statusChecker.CheckStatus;
// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine("{0} Creating timer.\n",
DateTime.Now.ToString("h:mm:ss.fff"));
Timer stateTimer = new Timer(tcb, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period.\n");
// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
private int invokeCount;
private int maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine("{0} Checking status {1,2}.",
DateTime.Now.ToString("h:mm:ss.fff"),
(++invokeCount).ToString());
if(invokeCount == maxCount)
{
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
}
}
最后为了把知识运用到实践中,用Timer类实现了一个定时关灯的小程序:
学到致用,的确是这样的,感觉只有真正实践,去写代码才能把知识学牢固,这是最大的一个收获。
相关阅读 更多 +