System.Threading.Timer 定时器的用法
System.Threading.Timer 是C# 中的一个定时器,可以定时(不断循环)执行一个任务。它是在线程上执行的,具有很好的安全性。为此 .Net Framework 提供了5个重载的构造器方法。官网的文档是这样解释的:
System.Threading.Timer 是一个简单、 轻型计时器,它使用回调方法,并由线程池线程提供服务。 但不建议使用 Windows 窗体,因为它的回调不会在用户界面线程上发生。 System.Windows.Forms.Timer 是使用 Windows 窗体的更好选择。 对于基于服务器的计时器的功能,您可以考虑使用 System.Timers.Timer, ,它将引发事件,并具有附加功能。
只要您使用 Timer, ,则必须保持对它的引用。 与任何托管对象一样 Timer 没有引用时才进行垃圾收集。 这一事实, Timer 是仍活动不会阻止它正在收集。
当不再需要一个计时器时,使用 Dispose 计时器持有方法来释放资源。 请注意,回调可能发生后 Dispose() 已调用方法重载,因为计时器是按线程池线程来安排回调的执行。 您可以使用 Dispose(WaitHandle) 方法重载来等待,直到所有回调都已都完成。
执行由计时器的回调方法应可重入,因为它在调用 ThreadPool 线程。 回调可同时执行两个线程池线程上的计时器间隔是否小于执行回调,所需的时间或者是否所有线程池线程都正在使用,并且回调被多次排队。
具体示例如下:
static void Main(string[] args)
{
var autoEvent = new AutoResetEvent(false);
Timer t = new Timer(p => FlushData(), autoEvent, 0, 10000);// 第一个参数是:回调方法,表示要定时执行的方法,第二个参数是:回调方法要使用的信息的对象,或者为空引用,第三个参数是:调用 callback 之前延迟的时间量(以毫秒为单位),指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。第四个参数是:定时的时间时隔,以毫秒为单位
autoEvent.WaitOne();
}
static void FlushData()
{
Console.WriteLine("Helo World");
}
参考资料:
System.Threading.Timer 定时器的用法的更多相关文章
- C# System.Threading.Timer 定时器
前提: 需要引入 System.Threading: 描述: 在很多时间我们都需要进行延迟执行,或是定时执行一些指定业务,这个时候使用 Timer 是最合适的,而且 Timer 是Cpu 级别处理对 ...
- System.Threading.Timer定时器使用注意事项
1.定时器不要直接在方法里面定义和赋值,因为方法执行完,方法体内的变量会被GC回收. 有时候我们将timer定义在了方法里面,然后看到timer被执行了几次之后才失效,原因就是GC不一定会立即回收. ...
- System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的 区别和用法
System.Windows.Forms.Timer执行的时候,如果你在过程中间加一个sleep整个的界面就死掉了,但是另外两个没有这个情况,System.Timers.Timer.System.Th ...
- 定时器:Timer:System.Threading.Timer类(转)
最近的一个项目有一些地方需要用到定时功能,在设计过程中,突然发现.net的Timer类居然还有很多我以前没有用过的功能,这里就跟大家分享一下 注:这里的Timer类特指System.Threading ...
- C# 计时器用法(DispatcherTimer、System.Timers.Timer、System.Threading.Timer)
首先,我觉得三种计时器最大的区别是:DispatcherTimer触发的内容会直接转到主线程去执行(耗时操作会卡住主线程),另外两个则是在副线程执行,如果需要修改界面,则需要手动转到主线程. Disp ...
- System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用
System.Windows.Forms.Timer.System.Timers.Timer.System.Threading.Timer的 区别和用法http://space.itpub.net/1 ...
- System.Threading.Timer的使用技巧
转自:http://www.360doc.com/content/11/0812/11/1039473_139824496.shtml# System.Threading.Timer timer = ...
- C# System.Threading.Timer 使用方法
public class TimerHelper { System.Threading.Timer timer; public TaskSendMMS tasksendmms { get; set; ...
- System.Threading.Timer使用心得
System.Threading.Timer 是一个使用回调方法的计时器,而且由线程池线程服务,简单且对资源要求不高. "只要在使用 Timer,就必须保留对它的引用."对于任何托 ...
随机推荐
- Android 图片上传
上传方式:两种 1:Base64() (1):获取图片路径,将图片转为String 类型 (2):通过post提交的方式.以键值对的方式上传到服务器,和一般的提交关键字没有任何区别. (3):这种 ...
- 用JQuery动态为选中元素添加/删除类
在做一些tab页功能时,我们经常会见到如下样式: 即当选中一个元素时,在此元素下会添加相应的类,以示区别.今天就研究了一下如何用JQuery实现此效果. 1. HTML代码 <a id=&quo ...
- LINQ 联表查询 取count 值
linq to sql 实现左外部连接:var query=from a in A join b in B on a.ID equals b.aID into ab from a1 in ab.Def ...
- Python>>>Flask框架使用之入门
操作平台Windows Python2.7 安装 pip install flask Hello World程序 from flask import Flask app = Flask(__name_ ...
- jsp脚本元素
在JSP页面中有三种脚本元素(Scripting Elements):声明.小脚本和表达式. 声明(declaration)用来在JSP页面中声明变量和定义方法.声明是以<%!开头,以%> ...
- CenOS 7 安装wordpress
1:Centos安装 php和html yum install httpd -y yum install php -y 2:将 wordpress 拖到目录 /var/www/html 3:浏览器访 ...
- iOS获取UUID,并使用keychain存储
http://blog.sina.com.cn/s/blog_5971cdd00102vqgy.html
- Vim常用命令总结
Vim常用命令总结: 下文是小编自己整理的关于日常linux vim编程过程中用的一些常用命令,资料参考鸟哥的 如果有需要的小伙伴可以参考一下!(底部有下载地址) 一. 一般模式可用的按钮说明 1.1 ...
- .NET 4.0运行.NET 2.0兼容方法
需要在相同目录下放一个.config文件,例如xxx.exe,就需要一个xxx.exe.config文件,内容如下: <?xml version="1.0"?> < ...
- x64 PL/SQL 连接 Oralce 提示 Could not initialize oci.dll
在 x64 的 Win10 上重新安装了 Oralce 后,通过 PL/SQL 连接数据库时,提示如下错误信息 环境 windows7 64bit Oracle win64 11gR2 PL/SQL ...