c# 区分几种定时器「timer」

1. System.Threading.Timer

System.Threading.Timer 是 C# 中最基本的定时器类之一。它是基于线程的定时器,可以在指定的时间间隔内执行一个委托方法。在使用这个定时器的时候,需要创建一个 TimerCallback 委托对象,它表示要执行的方法。然后通过 Timer 构造函数创建一个 Timer 对象,将 TimerCallback 对象和其他可选参数传递给构造函数。

下面是使用 System.Threading.Timer 的一个简单示例:

using System;

using System.Threading;

class Program

{

static void Main(string[] args)

{

TimerCallback callback = new TimerCallback(DoSomething);

Timer timer = new Timer(callback, null, 0, 1000);

Console.WriteLine("Press any key to stop the timer...");

Console.ReadKey();

timer.Dispose();

}

static void DoSomething(object state)

{

Console.WriteLine("Timer elapsed: " + DateTime.Now);

}

}

1.1 强调定时器的创建和启动方法

在上面的示例中,使用 TimerCallback 委托创建了一个名为 callback 的定时器回调方法。然后通过 Timer 构造函数创建了一个 Timer 对象,并传递了 callback 对象和其他参数。其中,第一个参数为 callback 对象,第二个参数为传递给回调方法的状态对象(在示例中为 null),第三个参数为初始启动延迟时间(以毫秒为单位),第四个参数为间隔时间(以毫秒为单位)。

这里需要注意的是,Timer 对象创建后,并不会自动启动定时器。要启动定时器,需要调用 Timer 对象的 Change 方法,并传递启动延迟时间和间隔时间。

在示例中,我们通过调用 timer.Dispose() 方法来停止定时器。调用该方法后,定时器将不再触发回调方法。

2. System.Timers.Timer

System.Timers.Timer 是另一个常用的定时器类,它也可以在指定的时间间隔内执行一个委托方法。与 System.Threading.Timer 不同的是,System.Timers.Timer 是基于事件的定时器,而不是基于线程的。这意味着回调方法是在创建 System.Timers.Timer 对象的线程上执行的。

下面是使用 System.Timers.Timer 的一个简单示例:

using System;

using System.Timers;

class Program

{

static void Main(string[] args)

{

Timer timer = new Timer(1000);

timer.Elapsed += TimerElapsed;

timer.Start();

Console.WriteLine("Press any key to stop the timer...");

Console.ReadKey();

timer.Stop();

timer.Dispose();

}

static void TimerElapsed(object sender, ElapsedEventArgs e)

{

Console.WriteLine("Timer elapsed: " + DateTime.Now);

}

}

2.1 强调定时器的启动和停止方法

在上面的示例中,创建了一个名为 timer 的 System.Timers.Timer 对象,并设置了 Elapsed 事件的处理方法。然后调用 timer.Start() 方法启动定时器。在定时器启动后的每次时间间隔过去后,将触发 Elapsed 事件,并执行相关的处理方法。

在示例中,我们通过调用 timer.Stop() 方法来停止定时器。调用该方法后,定时器将不再触发 Elapsed 事件。

3. System.Windows.Forms.Timer

System.Windows.Forms.Timer 是特定于 Windows 窗体应用程序的定时器类,并且仅在 UI 线程上执行委托方法。它可以在指定的时间间隔内执行一个方法,并且适用于需要在 UI 上执行操作的定时任务。

下面是使用 System.Windows.Forms.Timer 的一个简单示例:

using System;

using System.Windows.Forms;

class Program

{

static void Main(string[] args)

{

Timer timer = new Timer();

timer.Interval = 1000;

timer.Tick += TimerTick;

timer.Start();

MessageBox.Show("Press OK to stop the timer...");

timer.Stop();

timer.Dispose();

}

static void TimerTick(object sender, EventArgs e)

{

MessageBox.Show("Timer ticked: " + DateTime.Now);

}

}

3.1 强调定时器的使用和停止方法

在上面的示例中,首先创建了一个名为 timer 的 System.Windows.Forms.Timer 对象,并设置了 Interval 属性来指定时间间隔。然后使用 Tick 事件处理方法来处理定时器的触发事件。在定时器启动后的每次时间间隔过去后,将触发 Tick 事件,并执行相关的处理方法。

在示例中,我们通过调用 timer.Stop() 方法来停止定时器。调用该方法后,定时器将不再触发 Tick 事件。

4. 总结

以上介绍了 C# 中的几种常用定时器类,分别是 System.Threading.Timer、System.Timers.Timer、System.Windows.Forms.Timer。这些定时器类各有特点,可以依据具体需求选择使用。在使用过程中,可以根据需要设置定时器的启动和停止方法,以满足定时任务的需要。

需要注意的是,在使用定时器时需要考虑线程安全性问题,特别是涉及到多线程的场景。另外,在长时间运行的定时任务中,也需要注意及时释放定时器资源,避免内存泄漏问题的发生。

后端开发标签