美文网首页
异步编程(十二):计时器

异步编程(十二):计时器

作者: 曦航老袁 | 来源:发表于2019-02-21 12:27 被阅读0次

在.NET BCL中有几个可用的Timer类,异步编程时通常使用的是System.Threading命名空间中的那个。有关此计时器类的重要事项:

  1. 计时器在每次时间到期之后回调一个方法。此方法必须是TimerCallback委托形式的,结构如下:
void TimerCallback(object state)
  1. 当计时器到期后,系统会从线程池中的线程上开启一个回调方法,提供state对象作为其参数,并开始运行。
  2. 我们可以设置的计时器特性如下:
  • duetime是回调方法首次调用的时间。如果被设置为特殊的值Timeout.Infinite,则计时器不会开始;如果设置为零,加调方法会立即调用。
  • period是两次成功调用回调方法的时间间隔。如果它的值被设置为Timeout.Infinite,回调方法在首次调用后将不会再次调用。
  • state可以是null或在每次回调方法执行时要传入的对象引用。

Timer类的构造方法接受回调方法接受回调方法名称、duetime、period、state作为参数。Timer有很多的构造方法,其中最为常用的形式如下:

Timer(TimerCallback callback, object state, uint duetime, uint period)

Timer对象被创建后,我们可以通过使用Change方法来改变它的duetime或period参数。
下面是一个使用计时器的完整示例。Main方法创建了一个计时器,2秒钟后它会首次运行调用回调方法,然后每隔1秒回调一次。回调方法只是输出包含调用次数的消息。

using System;
using System.Threading;

namespace Timers
{
    class Program
    {
        int TimesCalled = 0;
        void Display(object state)
        {
            Console.WriteLine($"{(string)state} {++TimesCalled}");
        }

        static void Main()
        {
            Program p = new Program();
            Timer myTimer = new Timer(p.Display, "Processing timer event", 2000, 1000);
            Console.WriteLine("Timer started.");
            Console.ReadLine();
        }
    }
}

.NET BCL还提供了几个其他计时器类,每一个都有其各自的用途。
- System。Windows.Forms.Timer 这个类在Windows应用程序中使用,用来定期把WM_TIMER消息放到程序的消息队列中。当程序从队列获取消息后,它会在主用户接口线程中同步处理,这对Windows应用程序来说非常重要。
- System.Timers.Timer 这个类更复杂,它包含了很多的成员,使我们可能通过属性和方法来操作计时器。它还有一个Elapsed成员事件,每次时间到期就会发起这个事件。这个计时器可以运行在用户接口线程或工作者线程之上。

相关文章

  • 异步编程(十二):计时器

    在.NET BCL中有几个可用的Timer类,异步编程时通常使用的是System.Threading命名空间中的那...

  • js异步编程

    之前分析过js的运行机制,这里再介绍一下异步编程。 天生的异步操作,DOM的点击事件,AJAX获取数据,计时器等。...

  • Python学习笔记-第12天:异步编程(2)和单元测试

    第十二天 异步编程(2)和单元测试 今天计划学习Python的多线程编程异步编程,学习项目及练习源码地址:GitH...

  • ES6学习--异步编程--Generator

    异步编程 : (异步编程的语法目的就是让异步编程更像同步编程) 回调函数利用回调函数实现异步编程本身没有问题, 问...

  • JavaScript异步编程好文摘要

    JavaScript之异步编程简述JavaScript异步编程

  • 认识异步编程

    认识异步编程 本章主要介绍异步编程的概念和作用,Java中异步编程的场景以及不同异步编程场景应使用什么技术实现。 ...

  • part1整理

    函数式编程:JavaScript函数式编程指南 异步编程:异步编程 Promise源码 JavaScript基础知...

  • 论异步编程

    相信本书介绍了CompletableFuture,大家就会认识到什么是异步编程。异步编程的好处。 异步编程最大好处...

  • 读书笔记#Java异步编程实战-上

    Java异步编程实战 chap1 认识异步编程 异步编程概念与作用在使用同步编程方式时,由于每个线程同时只能发起一...

  • Combine 基础知识

    摘自《SwiftUI和Combine编程》---《Combine异步编程》 响应式异步编程模型 将“状态变化”看作...

网友评论

      本文标题:异步编程(十二):计时器

      本文链接:https://www.haomeiwen.com/subject/cwlryqtx.html