C# 独立线程上的可暂停计时器

C# 独立线程上的可暂停计时器,c#,multithreading,timer,C#,Multithreading,Timer,我需要定时器运行在单独的线程,可以暂停和恢复。 System.Threading.Timer将正常运行。但我注意到,即使在调试回调时,它也会产生新线程。我不希望在第一次回调完成之前启动下一次回调,我希望在回调执行期间暂停计时器 无法暂停System.Threading.Timer。 我不会测量任何时间,所以没有系统。诊断。秒表。 在一个例子中,有人实现了他自己的类,它是从Timer派生的,但我不知道这是什么Timer-System.Threading.Timer是密封的。 System.Wind

我需要定时器运行在单独的线程,可以暂停和恢复。 System.Threading.Timer将正常运行。但我注意到,即使在调试回调时,它也会产生新线程。我不希望在第一次回调完成之前启动下一次回调,我希望在回调执行期间暂停计时器

无法暂停System.Threading.Timer。 我不会测量任何时间,所以没有系统。诊断。秒表。 在一个例子中,有人实现了他自己的类,它是从Timer派生的,但我不知道这是什么Timer-System.Threading.Timer是密封的。 System.Windows.Threading.Dispatchermer可以停止,但回调是在UI线程上调度的,我不确定此类的可移植性。
我该怎么办?

您可以不使用计时器,而是将其设置为具有延迟的循环:

public static async Task RepeatingTask()
{
    while(true)
    {
        Console.WriteLine( "Doing cool stuff" );
        await Task.Delay( 2000 );
    }
}
你可以这样开始:

Task.Run( RepeatingTask );

注意:如果您需要准确地每隔2秒启动一次,则此操作不起作用。

您可以让一个任务在循环中运行,并在循环之间有一个延迟。是的,我现在正在编写一个带有while循环的线程,但是我想可能已经提供了一些内置的方式。你可以使用一个普通的计时器,但是让你正在做的事情成为一个任务,然后每次运行你都会检查上一个任务的完成情况或者类似的事情。