前些时候做了一个定时发送器的控制台程序。代码如下

Code

使用while true 与 主线程休眠的方式来现实定时执行TestOnTimer()的功能。然而,由于Sleep()方法随机可能会出现长时间休眠后无法自动唤醒的问题[原因未知],所以转而使用Timer类提供的方法。代码如下:

 

Code

 

Timer会为Elapsed委托的每一个方法NEW一个子线程异步去调用方法体。由此,即使主线程休眠却也并不影响委托方法的执行调用[猜测而已,未验证推论是否正确]

假设方法TestOnTimer执行的功能为check OneTable表某一状态,为0则并执行动作ActionOnTimer(),后更改OneTable状态为1。

如果Intergal设置时间过短,则有可能出现,第一次调用TestOnTimer方法并未结束,OneTable状态仍旧为0的时候便已经开始了第二次TestOnTimer()方法的调用,即出现ActionOnTimer()功能的重复调用。有时候,如果不加任何限制这无疑将是一场“灾难”。

 

posted on 2008-10-14 21:19  .Net Learning  阅读(2516)  评论(0编辑  收藏  举报