技术开发 频道

c#多线程教学(4):线程池和异步编程

    System.Threading.Timer Class

    Timer类对于周期性的在分离的线程执行任务是非常有效的,它不能被继承。

    这个类尤其用来开发控制台应用程序,因为System.Windows.Forms.Time是不可用的。比如同来备份文件和检查数据库的一致性。

    当创建Timer对象时,你药估计在第一个代理调用之前等待的时间和后来的每次成功调用之间的时间。一个定时调用发生在方法的应得时间过去,并且在后来周期性的调用这个方法。你可以适应Timer的Change方法来改变这些设置的值或者使Timer失效。当定时器Timer不再使用时,你应该调用Dispose方法来释放其资源。

    TimerCallback代表负责指定与Timer对象相关联的方法(就是要周期执行的任务)和状态。它在方法应得的时间过去之后调用一次并且周期性的调用这个方法直到调用了Dispose方法释放了Timer的所有资源。系统自动分配分离的线程。

    让我们来看一段代码看看事如何创建Timer对象和使用它的。我们首先要创建一个TimerCallback代理,在后面的方法中要使用到的。如果需要,下一步我们要创建一个状态对象,它拥有与被代理调用的方法相关联的特定信息。为了使这些简单一些,我们传递一个空参数。我们将实例化一个Timer对象,然后再使用Change方法改变Timer的设置,最后调用Dispose方法释放资源。
// class that will be called by the Timer public class WorkonTimerReq { public void aTimerCallMethod() { // does some work } //timer creation block //instantiating the class that gets called by the Timer. WorkonTimerReq anObj = new WorkonTimerReq () ; // callback delegate TimerCallback tcallback = new TimerCallback(anObj. aTimerCallMethod) ; // define the dueTime and period long dTime = 20 ; // wait before the first tick (in ms) long pTime = 150 ; // timer during subsequent invocations (in ms) // instantiate the Timer object Timer atimer = new Timer(tcallback, null, dTime, pTime) ; // do some thing with the timer object ... //change the dueTime and period of the Timer dTime=100; pTime=300; atimer.Change(dTime, pTime) ; // do some thing ... atimer.Dispose() ; ... }
0
相关文章