zoukankan      html  css  js  c++  java
  • 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");
            }
    

     

    参考资料:

     .Net FrameWork 官方文档

     Timer用法

  • 相关阅读:
    Springboot使用外置tomcat的同时使用websocket通信遇到的坑
    SpringBoot 使用 ApplicationContextAware实现类出现NullPointException的问题
    Java搭建微信公众号的服务器配置
    axios异步访问后台 @RequestParam 获取参数 HTTP Status 400
    springboot启动失败的问题('hibernate.dialect' not set)
    Java Optional 类
    ubuntu 18.04 解决无法联网的问题
    ubuntu安装rpm格式文件方法
    简述vue中父子组件是怎样相互传递值的(基础向)
    实现网站中英文切换的三种方法
  • 原文地址:https://www.cnblogs.com/wisdo/p/6014006.html
Copyright © 2011-2022 走看看