定时器时间跨度,我需要在不同的时间触发4个不同的动作

Timer timespan, I need to trigger 4 different actions at different times

我正在尝试在项目中使用计时器。但我真的觉得我缺乏大量关于定时器的知识。我正在制作一个项目,我需要根据经过的时间至少执行 4 种不同的操作。我用了很好的答案 这让 med 很高兴,因为我可以很容易地使用它,虽然不理解它 100%

但是 - 当我制作 2 个计时器时,它们都会在第一个计时器触发时触发,这是第一次。然后计时器恢复正常时间表。

public static void StartMSGT()
    {

        var startTimeSpan = TimeSpan.Zero;
        var startTimeSpan2 = TimeSpan.Zero;
        var periodTimeSpan = TimeSpan.FromSeconds(5);
        var periodTimeSpan2 = TimeSpan.FromMinutes(2);
        Console.WriteLine("timer have started!");
        System.Threading.Thread.Sleep(5000);
        var timer = new System.Threading.Timer((e) =>
        {
            Console.WriteLine("Timer hits");
        }, null, startTimeSpan, periodTimeSpan);

        var timer2 = new System.Threading.Timer((e) =>
        {
            Console.WriteLine("Timer2 hits");
        }, null, startTimeSpan2, periodTimeSpan2);
    }

这是我的结果:

10 秒后开始
5 秒后开始
计时器开始了!
等待比赛开始
定时器 2 命中
计时器命中
计时器命中
计时器命中
计时器命中
定时器命中

在第二个计时器中,我和第一个计时器一样有“startTimespan”,但这似乎没有什么不同。

如果有人能告诉我它是如何工作的简单解释,也许还有解决方案。非常感谢。

使用同一周期启动定时器:

var timer = new System.Threading.Timer((e) =>
{
    Console.WriteLine("Timer hits");
}, null, periodTimeSpan, periodTimeSpan);

var timer2 = new System.Threading.Timer((e) =>
{
    Console.WriteLine("Timer2 hits");
}, null, periodTimeSpan2, periodTimeSpan2);

this Timer constructor中的第三个参数是:

dueTime The amount of time to delay before callback is invoked, in milliseconds. Specify Infinite to prevent the timer from starting. Specify zero (0) to start the timer immediately.

因此,如果您指定 0 计时器将立即启动并调用第一个回调。