知识大全 .Net框架类库中定时器类的使用[3]

Posted

篇首语:读过一本好书,像交了一个益友本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .Net框架类库中定时器类的使用[3]相关的知识,希望对你有一定的参考价值。

技巧:.Net框架类库中定时器类的使用[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  不像我开始描述的两个定时器类 System Threading Timer有四个重载构造函数 就像下面这样

public Timer(TimerCallback callback object state long dueTime long period);public Timer(TimerCallback callback object state UInt dueTime UInt period);public Timer(TimerCallback callback object state int dueTime int period);public Timer(TimerCallback callback object state TimeSpan dueTime TimeSpan period);

  第一个参数(callback)要求一个TimerCallback的委托 它指向一个方法 该方法具有下面的结构

  public void TimerCallback(object state);

  第二个参数(state)可以为空或者是包含程序规范信息的对象 在每一个定时器事件被调用时该state对象作为一个参数传递给你的定时回调函数 记住定时回调功能是在一个工作者线程上执行的 所以你必须确保访问state对象的线程安全

  第三个参数(dueTime)让你定义一个引发初始定时器事件的时间 你可指定一个 立即开始定时器或者阻止定时器自动的开始 你可以使用System Threading Timeout Infinite常量

  第四个参数(period)让你定义一个回调函数被调用的时间间隔(毫秒) 给该参数定义一个 或者Timeout Infinite可以阻止后续的定时器事件调用

  一旦构造函数被调用 你仍然可以通过Change方法改变dueTime和period 该方法有下面四种重载形式

  public bool Change(int dueTime int period);public bool Change(uint dueTime uint period);public bool Change(long dueTime long period);public bool Change(TimeSpan dueTime TimeSpan period);

  下面是我在例子程序中用到的开始和停止该定时器的代码

//Initialize the timer to not start automatically System Threading Timer tmrThreadingTimer = newSystem Threading Timer(new TimerCallback(tmrThreadingTimer_TimerCallback) null System Threading Timeout Infinite );//Manually start the timer tmrThreadingTimer Change( );//Manually stop the timer tmrThreadingTimer Change(Timeout Infinte Timeout Infinite);

  正如你所期望的那样 通过选择System Threading Timer类运行例子程序会产生同你看到的System Timers Timer类一样的输出结果 因为TimerCallback功能也是在工作者线程上被调用 没有一个跳动被跳过(假设有工作者线程可用) Figure 显示了例子程序的输出结果

  不像System Timers Timer类 没有与SynchronizingObject相对应的属性被提供 任何请求访问UI控件的操作都必须通过控件的Invoke或BeginInvoke方法被列集

  定时器的线程安全编程

  为了最大限度的代码重用 三种不同类型的定时器事件都调用了同样的ShowTimerEventFired方法 下面就是三个定时器事件的处理函数

private void tmrWindowsFormsTimer_Tick(object sender System EventArgse) ShowTimerEventFired(DateTime Now GetThreadName());private void tmrTimersTimer_Elapsed(object sender System TimersElapsedEventArgse) ShowTimerEventFired(DateTime Now GetThreadName());private void tmrThreadingTimer_TimerCallback(object state) ShowTimerEventFired(DateTime Now GetThreadName());

  正如你所看到的 ShowTimerEventFired方法采用当前时间和当前线程名字作为参数 为了区别工作者线程和UI线程 在例子程序的主入口点设置CurrentThread对象的名字属性为 UIThread GetThreadName帮助函数返回Thread CurrentThread Name值或者当Thread CurrentThread IsThreadPoolThread属性为真时返回 WorkerThread

  因为System Timers Timer和System Threading Timer的定时器事件都是在工作者线程上执行的 所以在事件处理函数中的任何用户交互代码都不是马上进行的 而是被列集等候返回到UI线程上进行处理 为了这样做 我创建了一个ShowTimerEventFiredDelegate委托调用

  private delegate void ShowTimerEventFiredDelegate (DateTime eventTime string threadName); cha138/Article/program/net/201311/15305

相关参考

知识大全 .Net框架类库中定时器类的使用[1]

技巧:.Net框架类库中定时器类的使用[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不论

知识大全 .Net框架类库中定时器类的使用[4]

技巧:.Net框架类库中定时器类的使用[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Sh

知识大全 .Net框架类库中定时器类的使用[2]

技巧:.Net框架类库中定时器类的使用[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对S

知识大全 .net知识结构

  NET介绍微软NET战略及技术体系NETFramework框架类库(FCL)公共语言运行时(CLR)通用类型系统(CTS)公共语言规范(CLS)程序集(Assembly)应用程序域(Applica

知识大全 用反射调用任意.net库中的方法

注:ReturnMessage是我自写的一个类作用请查看我的其他文章我也把这个类一并附在后面通过NameSpaceAndClassName和MethodName实际上就可以精确定位一个方法了如调用ab

知识大全 从.NET类库代码来看ASP.NET运行时[1]

从.NET类库代码来看ASP.NET运行时[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 从.NET类库代码来看ASP.NET运行时[2]

从.NET类库代码来看ASP.NET运行时[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 ASP.NET上的ReCAPTCHA类库

ASP.NET上的ReCAPTCHA类库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  reCA

知识大全 ADO.NET的一个帮助类库

ADO.NET的一个帮助类库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ADONET的一个帮

知识大全 QTP调用自己开发的.net类库

QTP调用自己开发的.net类库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我现在用的是QT