我创建了一个System.Timers.Timer
,但我对它还很陌生。所以我之前使用过 Windows 窗体计时器,现在我想将此计时器用于控制台应用程序。
我的问题是我的计时器在一次 OnTimeEvent()
之后没有停止,我不知道为什么。
class SortingSysFinal
{
private static System.Timers.Timer aTimer;
public static void Main(String[] args)
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += OnTimedEvent;
aTimer.Interval = 1000;
aTimer.Enabled = true;
Console.Read();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0:HH:mm:ss.fff}", e.SignalTime);
aTimer.Stop();
}
}
最佳答案
问题在于您的 Main
方法中的这一行:
System.Timers.Timer aTimer = new System.Timers.Timer();
您正在创建一个新的本地Timer
对象,它不是类的aTimer
静态成员。
OnTimedEvent
确实被调用,但在这一行:aTimer.Stop()
它试图使用 aTimer
静态成员,即 >null
由于缺少初始化(因此引发异常)。
要修复此问题,请将上面的行更改为:
aTimer = new System.Timers.Timer();
这将按照我相信您的意图初始化类的静态成员,并使处理程序能够停止计时器。
请注意,System.Timers.Timer
不是线程安全的。 Elapsed
处理程序在单独的线程上调用(请参阅: documentation ),因此您需要使用锁来同步 calline Stop()
,甚至更好:使用System.Threading.Timer
相反。
关于c# - System.Timers.Timer 没有停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74581664/