• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#各种Timer类的区别与用法介绍

c#各种Timer类的区别与用法介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#timer控件的用法,c#中timer的用法,c#timer用法,c#中timer控件的用法,c#timer类等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。在必须更新用户界面的情况下,建议不要使用该计时器,因为它的回调不在用户界面线程上发生。在此类情况下,System.Windows.Threading.DispatcherTimer 是更好的选择,因为其事件是在用户界面线程上引发的。
多线程计时器
1:System.Threading.Timer
2:System.Timers.Timer

特殊目的的单线程计时器:
1:System.Windows.Forms.Timer(Windows Forms Timer)
2:System.Windows.Threading.DispatcherTimer(WPF timer);

多线程计时器比较强大,精确,而且可扩展性强;
单线程计时器比较安全,对于更新 Windows Forms controls或者WPF这种简单任务来说更方便。

实现了Component,所以可以在设计器显示。代替Change方法的一个Interval属性代替callback委托的一个Elapsed事件启动和停止timer的Enabled属性,默认是false。为了避免Enabled造成混乱,提供了Start和Stop方法。是否在每次指定的间隔结束时引发Elapsed时间,还是仅间隔第一次结束后运行的AutoReset属性。在WPF或Windows Forms中安全的调用方法的SynchronizingObject对象。publicstaticvoidMainThread()

staticvoidtmr_Elapsed(objectsender,ElapsedEventArgse)
{
Console.WriteLine("Tick...");
}
</div>
单线程计时器:
1:System.Windows.Forms.Timer(Windows Forms Timer)
2:System.Windows.Threading.DispatcherTimer(WPF timer);

单线程计时器是被设计成属于他们执行环境的计时器,如果你在一个Windows服务应用程序中使用Windows Forms的Timer,timer 事件并不会被触发,只有在对应的环境下才会被触发。

像System.Timers.Timer一样,他们也提供了相同的成员(Interval,Tick,Start,Stop),但是他们内部的工作原理不同,
WPF和Windows Forms的计时器使用消息循环机制来取代线程池产生消息的机制。
这意味着Tick事件总是在创建timer的那个线程上执行,同时也意味着如果上一个Tick消息还未被处理,即使时间超过了间隔时间,在消息循环中也只存在一个Tick消息。

下面是它们的优点:
你可以忘记线程安全。一个Tick事件在前一个Tick事件被处理完毕前不会被触发。你可以直接在Tick事件处理代码中更新控件,不需要调用Control.Invoke或Dispatcher.Invoke.
看下在Winform中使用单线程定时器的效果:

publicForm1()
{
InitializeComponent();

timer.Tick+=newEventHandler(timer_Tick);
timer.Enabled=true;
}

voidtimer_Tick(objectsender,EventArgse)
{
//模拟的做一些耗时的操作
System.Threading.Thread.Sleep(2000);
}
</div>
如果运行上面的代码,会发现UI界面响应速度很慢,
原理上面已经介绍了:单线程计时器基于Windows消息循环,应用程序会同步的处理计时器的消息。
解决这个问题的方法是使用多线程计时器:只要修改代码使用多线程计时器即可:

publicForm1()
{
InitializeComponent();

timer.Elapsed+=newSystem.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled=true;
}

voidtimer_Elapsed(objectsender,System.Timers.ElapsedEventArgse)
{
//模拟的做一些耗时的操作
System.Threading.Thread.Sleep(2000);
}
</div>
上面的例子告诉我们单线程计时器的缺点:
除非Tick事件的处理代码执行的非常快,否则UI界面会变得响应很慢。
所以 WPF和Windows Forms的计时器都非常适合小任务,尤其是界面更新的任务。例如时钟和计数显示。否则,你需要一个多线程计时器。
设为1000,再设一个变量每次加1.加12次后做你要做的事,这样就准了.

上面是2种自己使用一下,感觉那个好就可以了。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#中timer定时器用法实例
  • C#使用timer实现的简单闹钟程序
  • C#使用timer定时在屏幕上输出信息的方法
  • C#中的Timer和DispatcherTimer使用实例
  • c#各种Timer类的区别与用法介绍
  • C#中timer类的用法总结
  • 解析C#中如何把控件的边框角画为圆弧

相关文章

  • 2017-05-28C#中加载dll并调用其函数的实现方法
  • 2017-05-28探讨:如何使用委托,匿名方法对集合进行万能排序
  • 2017-05-28C#添加Windows服务 定时任务
  • 2017-05-28C#获取变更过的DataTable记录的实现方法
  • 2017-05-28验证本机的excel版本的C#代码
  • 2017-05-28http图片上传安全性问题 根据ContentType (MIME) 判断其实不准确、不安全
  • 2017-05-28C#组合函数的使用详解
  • 2017-05-28C#开发中的垃圾回收机制简析
  • 2017-05-28C#逐行分元素读取记事本数据并写入数据库的方法
  • 2017-05-28C# 超高面试题收集整理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#的正则表达式Regex类使用简明教程
    • C# IP地址与整数之间转换的具体方法
    • newtonsoft.json解析天气数据出错解决方法
    • C#实现开机自动启动设置代码分享
    • C#如何防止程序多次运行的技巧
    • Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
    • 使用C#发送带附件的电子邮件的方法的代码示例分析
    • .NET连接MongoDB数据库实例教程
    • C#中partial关键字的作用
    • WPF MVVM示例讲解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有