C# 使用Threading.Timer时保持主线程活动

C# 使用Threading.Timer时保持主线程活动,c#,multithreading,timer,C#,Multithreading,Timer,我在控制台应用程序的主方法中使用计时器。现在,我使用一些while循环来保持我在Web上找到的主线程的活动状态。因为当它死的时候,我传递给计时器的线程和执行方法也死了 问题:它是阻塞了我的主线程还是可以这样使用?或者有没有更好的方法在不阻塞任何内容的情况下保持主线程的活力 public void Run() { Logger.Trace("Timer Started."); Timer.Change(0, Timeout.Infinite); Console.WriteL

我在控制台应用程序的主方法中使用计时器。现在,我使用一些while循环来保持我在Web上找到的主线程的活动状态。因为当它死的时候,我传递给计时器的线程和执行方法也死了

问题:它是阻塞了我的主线程还是可以这样使用?或者有没有更好的方法在不阻塞任何内容的情况下保持主线程的活力

public void Run()
{
    Logger.Trace("Timer Started.");
    Timer.Change(0, Timeout.Infinite);
    Console.WriteLine("Press ESC to stop...");
    while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
    { }
}

我接受西纳特的回答。据


使用KeyAvailable是一种在不阻塞任何内容的情况下执行这些检查的普通方法

您可以使用Dispatcher TImer,它将在后台执行其他一些工作,并在需要时(例如每1s)调用到主线程中:@Strengat它将是控制台或Windows Service app和线程。TImer已经完成了我需要的所有工作。我只是想知道一种线程安全的方法,在不阻塞主线程的情况下保持主线程的活力。“这样使用可以吗”-可以。在控制台应用程序末尾使用是防止其完成的常见方法。。。但是,您正在检查(为什么?)是否存在
KeyAvailable
,这使得循环非常占用CPU。删除该复选框。@Sinatr我使用的键根据