ElapsedEventHandler not raised

本文关键字:raised not ElapsedEventHandler | 更新日期: 2023-09-27 18:06:32

我试图从c#教程的一个例子来触发事件从定时器类当一定数量的时间已经过去,但它似乎不工作。
下面是代码:

class Program
{
    static void Main(string[] args)
    {
        System.Timers.Timer tmr = new System.Timers.Timer();
        tmr.Elapsed += new ElapsedEventHandler(TimerTickHandler);
        tmr.Interval = 1000;
        tmr.Enabled = true;
        Console.ReadKey();
    }
    public static void TimerTickHandler(object sender, ElapsedEventArgs e)
    {
        Console.Write("'rprinting: {0}", e.SignalTime.ToString());
    }
}

我将TimerTickHandler附加到经过的事件上,并且在每秒钟之后,它应该将时间打印到屏幕上,但我没有得到任何输出。
你知道我哪里做错了吗?
谢谢你的帮助。

ElapsedEventHandler not raised

修改Console.ReadKey()Console.ReadLine()

这是一个讨论为什么Console.ReadKey()对控制台应用程序的多线程有奇怪影响的线程。

本质上,Console.ReadKey()对一个内部对象取了一个锁,Console.Write()也试图对这个对象取一个锁。所以当定时器关闭时,你用来报告它的Console.Write()阻塞了,因为Console.ReadKey()已经锁定了Console.Write()想要使用的同一个对象。

我认为这是Console.ReadKey()中的一个bug。在等待I/O时持有锁总是一个bug,恕我直言。

还请注意,如果您将Console.Write()更改为Debug.WriteLine()并附加调试器,即使您将Console.ReadKey()保留在

中,它也会工作。