C#中三种Timer计时器的详细用法

当我们需要在C#中执行一些定时任务时,我们可以使用Timer计时器。在C#中,有三种不同的Timer计时器,分别是System.Timers.Timer、System.Threading.Timer和System.Windows.Forms.Timer。下面,我们将分别介绍它们的详细用法。

System.Timers.Timer

System.Timers.Timer是一个线程池的计时器,可以在一定时间间隔内反复触发事件。常用属性和方法如下:

属性

  • Interval:获取或设置间隔时间,单位为毫秒。
  • AutoReset:获取或设置一个值,指定计时器是否应一直定期引发事件。
  • Enabled:获取或设置计时器是否应引发Elapsed事件。
  • SynchronizingObject:获取或设置Object,在发生Elapsed事件时将该事件排队到事件处理程序线程上。

事件

  • Elapsed:在Interval时间间隔到达时引发的事件。

示例

using System;
using System.Timers;

class Program
{
    static void Main(string[] args)
    {
        var timer = new System.Timers.Timer(500);
        timer.Elapsed += OnTimedEvent;
        timer.AutoReset = true;
        timer.Enabled = true;

        Console.WriteLine("Timer started. Press any key to end.");
        Console.ReadKey();
    }

    static void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime);
    }
}

上述代码中创建了一个System.Timers.Timer计时器,每隔500毫秒就会触发OnTimedEvent事件。在OnTimedEvent中会输出当前时间。程序执行时,会不断输出当前时间,直到按下键盘任意键。

System.Threading.Timer

System.Threading.Timer是基于线程的计时器,它使用较低级别的机制进行计时,相对于System.Timers.Timer更加精确,但使用起来更加复杂。常用的构造函数和方法如下:

构造函数

  • Timer(TimerCallback callback, Object state, int dueTime, int period):使用指定回调方法、状态对象、到期时间和间隔时间初始化新实例。

方法

  • Change(int dueTime, int period):更改计时器的起始时间和时间间隔。

示例

using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        var timer = new System.Threading.Timer(OnTimedEvent, null, 1000, 500);

        Console.WriteLine("Timer started. Press any key to end.");
        Console.ReadKey();
    }

    static void OnTimedEvent(Object obj)
    {
        Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", DateTime.Now);
    }
}

上述代码中创建了一个System.Threading.Timer计时器,起始时间为1000毫秒,间隔时间为500毫秒。在OnTimedEvent中会输出当前时间。程序执行时,会不断输出当前时间,直到按下键盘任意键。

System.Windows.Forms.Timer

System.Windows.Forms.Timer是在UI线程中工作的计时器。它可以自动处理多个时钟并在事件处理程序中引发Tick事件。常用属性和方法如下:

属性

  • Enabled:获取或设置计时器是否应引发Tick事件。
  • Interval:获取或设置间隔时间,单位为毫秒。

事件

  • Tick:在Interval时间间隔到达时引发的事件。

示例

using System;
using System.Windows.Forms;

class Program
{
    static void Main(string[] args)
    {
        var form = new Form();
        var timer = new Timer { Interval = 500 };
        timer.Tick += OnTimedEvent;

        form.Controls.Add(timer);
        timer.Start();

        Application.Run(form);

        void OnTimedEvent(Object obj, EventArgs e)
        {
            Console.WriteLine("The Tick event was raised at {0:HH:mm:ss.fff}", DateTime.Now);
        }
    }
}

上述代码中创建了一个System.Windows.Forms.Timer计时器,间隔时间为500毫秒。在OnTimedEvent中会输出当前时间。程序执行时,会不断输出当前时间,直到关闭窗口。

通过上述详细的介绍,我们可以了解到C#中三种不同的Timer计时器的用法,便于在实际开发中选择最合适的计时器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中三种Timer计时器的详细用法 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#中JavaScriptSerializer帮助类用法实例

    C#中的JavaScriptSerializer帮助类用于将.NET对象序列化为JSON格式字符串,或将JSON格式字符串反序列化为.NET对象。以下是使用JavaScriptSerializer帮助类的完整攻略。 步骤1:添加JavaScriptSerializer命名空间 首先,我们需要添加JavaScriptSerializer命名空间。使用方法是在.…

    C# 2023年5月31日
    00
  • 一文带你了解 C# DLR 的世界(DLR 探秘)

    一文带你了解 C# DLR 的世界(DLR 探秘) 前言 C# 是一门强类型语言,而动态语言通常不需要进行类型信息审查,能够进行热补丁等动态性操作。C# 的 DLR 使得 C# 也能够像动态语言一样改变行为,使其更加灵活。本文将探讨 C# DLR 的概念、API 和示例。 什么是 DLR DLR(Dynamic Language Runtime) 是 .Ne…

    C# 2023年5月31日
    00
  • C#多线程之取消架构介绍

    C#多线程之取消架构介绍攻略 什么是C#多线程取消架构 在C#中,我们可以使用多线程来进行异步编程,但是在实际场景中,有时候由于各种原因,我们需要中途取消一个正在运行的线程。而为了达到这个目的,C#中引入了取消架构(Cancellation Framework),通过这个机制,我们可以实现对多线程操作的取消。在该机制中,我们创建一个CancellationT…

    C# 2023年5月15日
    00
  • 详解LINQ入门(上篇)

    详解LINQ入门(上篇) LINQ简介 LINQ全称是“Language Integrated Query”,是.NET语言的一项重要特性,提供了一种方便的方式来查询数据,不仅支持关系型数据库,还可以用于XML文件、对象集合等数据源。它的出现简化了我们的代码逻辑,提高了开发效率。 面向对象和面向过程的编程风格 在介绍如何使用LINQ之前,我们先来简单了解一下…

    C# 2023年6月1日
    00
  • C#实现俄罗斯方块基本功能

    C#实现俄罗斯方块基本功能的攻略可以分为以下几个步骤: 第一步:搭建基本框架 创建一个控制台应用程序项目,或者一个 WPF/WinForms 窗体应用程序项目。 在项目中创建 Block 类,该类代表一个俄罗斯方块方块。 在项目中创建 GameBoard 类,该类代表整个游戏面板。 在项目中创建 GameManager 类,该类负责游戏逻辑,如方块下落、旋转…

    C# 2023年6月1日
    00
  • ASP.NET Core 中的Main方法详解

    下面是关于“ASP.NET Core 中的 Main 方法详解”的完整攻略。 Main 方法详解 在 ASP.NET Core 中,Main 方法是整个应用程序的入口点,它是在应用程序启动时第一个被调用的方法。Main 方法由运行时负责调用,你可以在其中执行一些初始化的工作,比如配置、依赖注入等。 Main 方法的签名如下: public static vo…

    C# 2023年5月31日
    00
  • C#语言使用gRPC、protobuf(Google Protocol Buffers)实现文件传输功能

    接下来我将为您详细讲解如何使用C#语言通过gRPC和protobuf实现文件传输功能。 1. gRPC和protobuf简介 1.1 gRPC gRPC是一种高性能、开源和通用的RPC框架,可以用于多种语言和平台。它基于HTTP/2协议设计,使用protobuf作为数据传输的格式。相比于传统的RESTful API和SOAP,gRPC有以下优势: 性能更高:…

    C# 2023年6月1日
    00
  • C#多线程之线程中止Abort()方法

    下面我将为您详细讲解 “C#多线程之线程中止Abort()方法” 的完整攻略。 什么是Abort()方法 Thread.Abort() 方法是 Thread 类提供的用来终止线程的方法。它是通过引发 System.Threading.ThreadAbortException 异常来终止线程的。 在运行时,当一个线程调用 Abort() 方法时,它本身会向目标…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部