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# 8.0中的await foreach使用

    下面是“聊一聊C#8.0中的await foreach使用”的完整攻略: 什么是await foreach 在C# 8.0中,可以使用异步枚举器(async iterator)和await foreach语法来迭代异步可枚举器(async enumerable)。await foreach把foreach循环与异步编程相结合,可以更简单、更有效地处理异步枚举…

    C# 2023年5月15日
    00
  • C#.NET 图片水印添加代码

    下面是 “C#.NET 图片水印添加代码” 的详细攻略。 一、准备工作 了解 C# 语言和 .NET 框架 安装 Visual Studio 开发环境,并选择 C# 开发环境 安装开源图片处理库 ImageProcessor 二、添加水印的基本步骤 加载要添加水印的图片 定义水印文字或水印图片 在图片上绘制水印 保存新的图片 三、示例代码说明 示例一:添加文…

    C# 2023年5月31日
    00
  • C# SynchronizationContext以及Send和Post使用解读

    C#中的SynchronizationContext是用于处理多线程并发问题的一种机制,它能够确保在多线程环境下的UI操作不会出现问题,保障了程序的稳定性和可靠性。在使用SynchronizationContext时,我们借助它提供的Send和Post方法来将指定的操作添加到指定的队列中,等待处理。 SynchronizationContext的作用 Syn…

    C# 2023年6月6日
    00
  • 探讨Object转为String的几种简易形式详解

    关于“探讨Object转为String的几种简易形式详解”的完整攻略,我们可以以以下结构来进行讲解: 探讨 Object 转为 String 的几种简易形式详解 一、Object 转 String 的默认形式 我们首先需要明确的是,当一个 Object 转为 String 时,会有一个默认的转换方式。这个过程可以通过 Object 中的 toString()…

    C# 2023年5月15日
    00
  • C#通过JObject解析json对象

    下面是如何通过C#中的JObject类解析JSON对象的完整攻略: 1. 引用Newtonsoft.Json包 要使用JObject类来解析JSON对象,需要引用Newtonsoft.Json包。在Visual Studio中,可以通过NuGet包管理器安装引用。在Package Manager Console中执行以下命令即可: Install-Packa…

    C# 2023年5月31日
    00
  • C#自写的一个HTML解析类(类似XElement语法)

    我会为你详细讲解“C#自写的一个HTML解析类(类似XElement语法)”的完整攻略。 什么是HTML解析类? HTML解析类是一种可以解析HTML文档并提取其中内容的工具。它可以识别HTML标记,提取其中的文本和属性,并将它们封装成一个对象,以便于使用和管理。 使用C#自写的HTML解析类 C#自写的HTML解析类使用起来非常简单,其代码如下: usin…

    C# 2023年6月1日
    00
  • .NET Core通过dotnet publish命令发布应用

    .NET Core通过dotnet publish命令发布应用的攻略 在.NET Core中,我们可以使用dotnet publish命令将应用程序发布为可执行文件或NuGet包。本攻略将详细介绍如何使用dotnet publish命令发布应用程序。 发布应用程序 我们可以通过以下步骤使用dotnet publish命令发布应用程序。 打开命令行窗口。 进入…

    C# 2023年5月16日
    00
  • ASP.NET Core中的Configuration配置一

    在 ASP.NET Core 中,可以使用 Configuration 来管理应用程序的配置数据。Configuration 可以从多个来源读取配置数据,如 appsettings.json 文件、环境变量、命令行参数等。以下是详解 ASP.NET Core 中的 Configuration 配置的完整攻略: 步骤一:添加 Configuration 在 A…

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