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附加到经过的事件上,并且在每秒钟之后,它应该将时间打印到屏幕上,但我没有得到任何输出。
你知道我哪里做错了吗?
谢谢你的帮助。
修改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()
保留在