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

yizhihongxing

当我们需要在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#中的字符串拼接@

    详解C#中的字符串拼接@ 什么是字符串拼接? 在C#中,我们经常需要将多个字符串连接起来,得到一个完整的字符串。比如在构造SQL语句、拼接URL参数等场景中,字符串拼接是非常常见的操作。在最初的C#版本中,字符串拼接操作主要使用加号(+)进行操作。但是,这种方式会产生很多临时字符串对象,对内存和性能有影响。从C# 2.0版本开始,开发者可以使用字符串拼接运算…

    C# 2023年6月8日
    00
  • 利用WPF窗口程序设计简单计算器

    利用WPF窗口程序设计简单计算器攻略 WPF(Windows Presentation Foundation)是Windows应用程序开发的一种技术,它通过XAML语言和C#等编程语言实现了数据绑定、样式样板、动画、2D和3D绘图等功能,再加上.NET框架的各种支持,使得WPF成为Windows应用程序开发中非常重要的工具。接下来,本文将详细讲解如何利用WP…

    C# 2023年6月7日
    00
  • ASP.NET MVC把数据库中枚举项的数字转换成文字

    以下是“ASP.NET MVC把数据库中枚举项的数字转换成文字”的完整攻略: 什么是枚举 枚举是一种特殊的数据类型,它定义了一组命名的常量。在.NET MVC中,枚举通常用于表示状态、类型等。 ASP.NET MVC把数据库中枚举项的数字转换成文字的过程 以下ASP.NET MVC把数据库中枚举项的数字转换成文字的详细过程: 步骤1:定义枚举 首先,我们需要…

    C# 2023年5月12日
    00
  • C#.NET实现网页自动登录的方法

    下面我会详细讲解如何使用C#.NET实现网页自动登录的方法。 一、需要用到的工具和技术 HttpWebRequest类:C#中提供的Http请求发送类,用于请求Web页面并获取响应数据。 CookieContainer类:C#中提供的Cookie容器,用于管理发送和接收的Cookie信息。 HtmlAgilityPack类库:第三方类库,用于解析HTML文本…

    C# 2023年6月1日
    00
  • unity将图片转换成字体的方法

    转换图片成字体,可以使用Unity的TextMesh Pro插件。下面是具体的步骤: 1. 安装TextMesh Pro 插件 在Unity Asset Store中搜索“TextMesh Pro”并下载安装 2. 创建一个新的TextMesh Pro字体 在菜单栏中依次选择TextMeshPro -> Font Asset Creator,打开字体生…

    C# 2023年6月3日
    00
  • .NET Core开源 DDD微服务 支持 多租户 单点登录 多级缓存、自动任务、分布式、日志、授权和鉴权 、网关 、注册与发现 系统架构 docker部署

    源代码地址https://github.com/junkai-li/NetCoreKevin基于NET6搭建跨平台DDD思想WebApi架构、IDS4单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权、CAP、SignalR、 docker部署  如需简约项目可直接去除项目引用 解耦设计都可以单独引用 架构默认全部引用并启动 项目启动时注意相关 R…

    C# 2023年4月27日
    00
  • C#使用读写锁解决多线程并发问题

    下面就是C#使用读写锁解决多线程并发问题的完整攻略。 什么是读写锁 读写锁是一种并发控制机制,它允许多个线程同时读取共享的数据,但在写入数据时需要互斥访问,即写者独占。 为什么需要读写锁 在多线程程序中,当多个线程同时读取共享数据时,如果没有对其进行保护,容易出现数据不一致的情况,也可能会降低程序性能。而使用读写锁则可以解决这个问题,提高程序性能。 C#中的…

    C# 2023年5月15日
    00
  • c#使用process.start启动程序报错解决方法

    下面为你讲解一下“c#使用process.start启动程序报错解决方法”的完整攻略。 问题描述 在使用 C# 的 Process.Start() 方法启动程序时,可能会遇到以下报错信息: System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件。 at System.Diagnostics.…

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