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# 委托的常见用法

    C# 委托的常见用法 C#中委托是一种引用方法的类型,可以将方法视为对象进行传递。 C#委托可以让我们写出更灵活,更可读性和更维护性的代码。 接下来介绍一些C#委托类型的常见用法。 委托作为参数 将委托作为方法参数,可以按需传递需要调用的方法。此方式允许运行时决定调用哪个方法。示例代码如下: delegate int NumberChanger(int n)…

    C# 2023年6月7日
    00
  • C#版ftp方法实现类的代码

    C#版ftp方法实现类的代码可以通过使用C#的FTP类库完成。FTP,即File Transfer Protocol(文件传输协议),是一种网络协议,用于在服务器和客户端之间传输文件。C#通过FTP类库实现FTP操作非常方便。这里我们将详细讲解如何实现C#版的FTP方法实现类。 基本原理 FTP客户端通过FTP协议连接FTP服务器,进行文件上传、下载、删除、…

    C# 2023年6月6日
    00
  • C#生成随机验证码代码分享

    下面是关于C#生成随机验证码的完整攻略。 一、生成随机验证码的基本思路 要生成随机验证码,我们的基本思路是: 定义一个包含所有可能字符的字符串; 随机生成一组字符组合成随机字符串; 显示生成的随机字符串。 二、生成随机验证码的详细步骤 下面我们来详细讲解每一步实现的具体内容。 2.1 定义包含所有可能字符的字符串 我们可以定义一个字符串变量,包含所有可能作为…

    C# 2023年6月3日
    00
  • C#实现简单的聊天窗体

    C#实现简单的聊天窗体 1. 确定窗体样式和布局 简单的聊天窗体通常包含一个用于显示聊天记录的文本框,一个用于输入聊天信息的文本框和一个发送按钮。布局可以使用WinForm中自带的TableLayoutPanel或者Panel组件自行进行布局设置。 2. 实现简单的网络通信 为了实现聊天功能,我们需要使用一些网络通信相关的库来帮助我们达成通信的目标,例如.N…

    C# 2023年6月1日
    00
  • 详解如何通过C#/VB.NET调整PDF文档页边距

    请参考以下完整攻略: 1. 安装依赖库 要使用C#/VB.NET调整PDF文档页边距,我们需要使用一个PDF库来操作PDF文档。这里我们使用iTextSharp库来进行操作。在Visual Studio中打开项目,右键单击项目,然后选择“管理NuGet包”。在NuGet包管理器中搜索“iTextSharp”,然后离线安装。 2. 加载PDF文档 使用iTex…

    C# 2023年6月6日
    00
  • 在多线程中调用winform窗体控件的实现方法

    在多线程中调用winform窗体控件是开发过程中常见的问题,因为在多线程场景下,是不允许直接操作UI控件的。下面是实现方法的完整攻略。 1. 合适的线程池 要在多线程中操作UI控件,第一步就要选用合适的线程池,它允许我们在不同的线程下执行不同的后台操作,同时又可以保留主线程的UI。以下是一个简单的示例: //线程池容量为5 ThreadPool.SetMax…

    C# 2023年5月15日
    00
  • windows中使用C# 调用 C语言生成的dll

    准备工作 首先,确保你会C#开发,并且已经安装好了Visual Studio。其次,我们需要准备一个C语言的dll,作为我们的示例,我们将使用以下的代码: #include <stdio.h> int add_numbers(int a, int b) { return a + b; } 保存以上代码到一个add_numbers.c的文件中。接下…

    C# 2023年6月1日
    00
  • C#基础知识之new关键字介绍

    下面是关于” C#基础知识之new关键字介绍”的完整攻略: 什么是new关键字 在C#中,new关键字有两种不同的用法。一种是用来创建新的对象,另一种是用来隐藏基类中的同名成员。 创建新的对象 当我们创建一个新的对象时,需要使用new关键字和构造函数。构造函数是一个类中的特殊方法,用于初始化新对象的所有字段和属性。以下是一个简单的示例: public cla…

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