您的位置:

C# System.Threading.Timer:多方位详解

一、基本概念与使用

1、System.Threading.Timer是什么

System.Threading.Timer是用于在指定时间间隔内执行指定的代码的类。它是System.Threading.Timer类的实例化,能够让你在你的应用程序中创建一个可以持续运行,直到你不需要它为止的周期性线程。

2、Timer的使用方法

Timer的使用需要以下3个参数:

private static Timer _timer;
_timer = new Timer(TimerMethod, null, 0, 3000);

第一个参数是一个TimerCallback委托类型的方法,用于指定要执行的代码。第二个参数是一个object类型的参数,可选的,用于传递给指定的方法。第三个参数指定定时器的时间间隔,单位为毫秒。

在执行完以上代码后,Timer就会定期执行TimerMethod方法。

二、Timer的构造函数详解

1、TimerCallback委托

TimerCallback委托是指定在定时器触发时要执行的方法。它有一个object类型的参数,可选的,该参数就是指定的参数。

public delegate void TimerCallback(object state);

2、stateObject和waitTime

Timer构造函数的第二个参数是stateObject,它通常是null,如果你想指定stateObject,请使用构造函数的另一个重载来实现。第三个参数waitTime是指定定时器首次触发的时间间隔,单位为毫秒。

public Timer(TimerCallback callback, object state, int dueTime, int period);

3、dueTime和period

Timer的另一个重载构造函数需要指定dueTime和period参数,这个构造函数的意义是创建一个定时器,该定时器从当前时间开始计时,第一次到期时间是dueTime,以后每次的时间间隔是period。

public Timer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period);

三、Timer执行方法的实现方式

1、使用TimerCallback委托

private void TimerMethod(object state)
{
    // 执行代码逻辑
}

2、使用Lambda表达式

_timer = new Timer(state => {
    // 执行代码逻辑
}, null, 0, 3000);

3、使用匿名方法

_timer = new Timer(delegate (object state) {
    // 执行代码逻辑
}, null, 0, 3000);

四、Timer取消与释放

1、取消Timer

当你想要停止定时器时,需要调用Cancel()方法。

_timer.Cancel()

2、释放Timer

释放Timer需要调用Dispose()方法。

_timer.Dispose()

五、Timer的常用应用场景

1、重复执行一个任务

定时器可用于重复执行一项任务。例如,定时器可用于每隔5秒自动更新应用程序中的所有数据。

2、计时器

定时器还可用于创建计时器。例如,当用户启动数字游戏时,定时器可用于记录游戏的时间。

3、轮询特定资源

使用定时器可实现轮询特定资源(如远程服务器是否可用),并在特定时间间隔内询问资源状态。

六、本文示例代码

这里为大家提供了一个简单的Timer示例代码,用于定期输出当前系统时间:

private static Timer _timer;

static void Main(string[] args)
{
    Console.WriteLine("Timer Start!");

    _timer = new Timer(TimerMethod, null, 0, 3000); //每隔3秒钟执行一次

    Console.ReadLine();
}

private static void TimerMethod(object state)
{
    Console.WriteLine("Current Time: {0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}