知识大全 .Net框架类库中定时器类的使用[4]
Posted 事件
篇首语:少量的常识,当得大量的学问。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 .Net框架类库中定时器类的使用[4]相关的知识,希望对你有一定的参考价值。
技巧:.Net框架类库中定时器类的使用[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
ShowTimerEventFiredDelegate允许ShowTimerEventFired方法在UI线程上调用它自己 Figure 显示了发生这一切的代码
通过查询InvokeRequired属性可以非常容易的知道你是否从当前线程可以安全的访问Windows窗体控件 在这个例子中 如果列表框的InvokeRequired属性为真 窗体的BeginInvoke方法就可以被ShowTimerEventFired方法调用 然后再被ShowTimerEventFiredDelegate方法调用 这能够保证列表框的Add方法在UI线程上执行
正如你所看到的 当你编写异步定时器事件时有许多问题需要意识到 在使用System Timers Timer和System Threading Timer之前我推荐你阅读Ian Griffith的文章 Windows Forms:Give Your NET based Application a Fast and Responsive UI with Multiple Threads 该文刊登在MSDN杂志的 年 月份的期刊上
处理定时器事件重入
当和异步定时器事件打交道时 如由System Timers Timer和System Threading Timer产生的定时器事件 有另外一个细微之处你需要考虑 问题就是必须处理代码重入 如果你的定时器事件处理函数代码执行时间比你的定时器引发定时器事件的时间间隔要长 你预先又没有采取必要的措施保护防止多线程访问你的对象和变量 你就会陷入调试的困境 看一下下面的代码片断
private int tickCounter = ;private void tmrTimersTimer_Elapsed(object sender System Timers ElapsedEventArgse) System Threading Interlocked Increment(ref tickCounter); Thread Sleep( ); MessageBox Show(tickCounter ToString());
假设你的定时器间隔属性设置为 毫秒 你也许会奇怪当第一个信息框弹出时显示的值是 这是因为在这 秒期间第一个定时器事件正在睡眠 而定时器却在不同的工作者线程上继续产生时间消失事件 因此 在第一个定时器事件处理完成之前tickCounter变量被增加了 次 注意我使用了Interlocked Increment方法以线程安全的方式增加tickCounter变量的值 也有其它方法可以这样做 但是Interlock Increment是为这种操作而特别设计的
解决这种问题的简单方法就是在你的事件处理函数代码块中暂时禁止定时器 接着再允许定时器 就像下面的代码
private void tmrTimersTimer_Elapsed(object sender System Timers ElapsedEventArgse) tmrTimers Enabled = false; System Threading Interlocked Increment(ref tickCounter); Thread Sleep( ); MessageBox Show(tickCounter ToString()); tmrTimersTimer Enabled = true;
有了这段代码 消息框就会每 秒钟显示一次 就像你所期望的那样 tickCounter的值每次只增加 另外一些可选的原始同步对象就是Monitor或mutex去确保所有将来的事件被排队直到当前的事件处理函数执行完成
结论
为了快速方便的看到 NET框架中这三个定时器类的不同之处 见Figure 对三个类的比较 当使用定时器类时有一点你要考虑的就是是否以使用Windows调度器去定期的运行标准的可执行程序来更简单的解决问题
cha138/Article/program/net/201311/15303相关参考
技巧:.Net框架类库中定时器类的使用[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 不论
技巧:.Net框架类库中定时器类的使用[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 不像
技巧:.Net框架类库中定时器类的使用[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对S
NET介绍微软NET战略及技术体系NETFramework框架类库(FCL)公共语言运行时(CLR)通用类型系统(CTS)公共语言规范(CLS)程序集(Assembly)应用程序域(Applica
用VB.NET2005编写定时关机程序[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nbs
.NET框架4.0中都有些什么? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前不久在美国洛杉
是否能让JAVA和.NET框架共存?[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! B组的
注:ReturnMessage是我自写的一个类作用请查看我的其他文章我也把这个类一并附在后面通过NameSpaceAndClassName和MethodName实际上就可以精确定位一个方法了如调用ab
ASP.NETMVC4框架揭秘 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 第章ASPNET+
.NET框架4.0新功能先睹为快 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 前不久在美国洛杉