两种方法释放 System.Threading.Timer 对象

您可以通过以下两种方法释放 System.Threading.Timer 对象:

1. 等待 Timer 处理完当前的工作并释放资源

    在 Timer 对象的回调方法中,您可以调用 Timer.Change 方法来更改定时器的参数,例如将定时器的 dueTime 和 period 设置为 Timeout.Infinite,以强制定时器停止。这样,当定时器的回调方法执行完成后,系统会自动释放相应的资源。以下是一个示例代码:

using System;
using System.Threading;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个新的 Timer 对象,每隔 1 秒执行一次回调方法
        Timer timer = new Timer(
            (state) => Console.WriteLine("定时器执行了一次。"),
            null,
            TimeSpan.FromSeconds(0),
            TimeSpan.FromSeconds(1));

        Console.ReadLine();

        // 在回调方法中更改定时器参数,以强制停止定时器并释放资源
        timer.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan);
    }
}

2. 手动释放 Timer 对象

    如果您需要在定时器执行之前或之后立即释放其资源,可以调用 Timer.Dispose 方法手动释放 Timer 对象。以下是一个示例代码:

    using System;
    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个新的 Timer 对象,每隔 1 秒执行一次回调方法
            Timer timer = new Timer(
                (state) => Console.WriteLine("定时器执行了一次。"),
                null,
                TimeSpan.FromSeconds(0),
                TimeSpan.FromSeconds(1));

            Console.ReadLine();

            // 手动调用 Dispose 方法释放 Timer 对象
            timer.Dispose();
        }
    }
   

    注意,如果您选择手动释放 Timer 对象,应确保在回调方法已经完成后才释放 Timer 对象,否则会导致回调方法访问已释放的对象并引发异常。

希望这些提示可以帮助您释放 System.Threading.Timer 对象。