注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

Timer 构造函数 (TimerCallback, Object, Int32, Int32)  

2012-01-08 10:17:14|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

使用 32 位的有符号整数指定时间间隔,初始化 Timer 类的新实例。

参数

callback
类型:System.Threading.TimerCallback
一个 TimerCallback 委托,表示要执行的方法。
state
类型:System.Object
一个包含回调方法要使用的信息的对象,或者为 null
dueTime
类型:System.Int32
调用 callback 之前延迟的时间量(以毫秒为单位)。 指定 Timeout.Infinite 可防止启动计时器。 指定零 (0) 可立即启动计时器。
period
类型:System.Int32
调用 callback 的时间间隔(以毫秒为单位)。 指定 Timeout.Infinite 可以禁用定期终止。
备注

在超过 dueTime 后及此后每隔 period 时间间隔,都会调用一次由 callback 参数指定的委托。

注意 注意

在指定回调方法时,Visual Basic 用户可以省略 TimerCallback 构造函数,而只需使用 AddressOf 运算符即可。 Visual Basic 将自动调用正确的委托构造函数。

如果 dueTime 为零 (0),则立即调用 callback 如果 dueTimeTimeout.Infinite,则不会调用 callback;计时器将被禁用,但通过调用 Change 方法可以重新启用计时器。

如果 period 为零 (0) 或 Infinite,并且 dueTime 不是 Infinite,则只会调用一次 callback;计时器的定期行为将被禁用,但使用 Change 方法可以重新启用该行为。

callback 指定的方法应是可重入的,这是因为该方法是在 ThreadPool 线程上调用的。 该方法在以下两种情况下可以同时在两个线程池线程中执行:一是计时器间隔小于执行该方法所需的时间;二是所有线程池线程都在使用,并且多次对该方法进行排队。

下面的代码示例演示如何创建 TimerCallback 委托和初始化 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();
        }
    }
}


  评论这张
 
阅读(657)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017