场景如下:
有一个文本框
,用户可以在其中输入DispatcherTimer
必须启动的时间。计时器设置为始终运行 4 小时,并且 Timer.Tick 事件播放声音。假设计时器从 04:00:00 (HH:mm:ss) 开始,它应该运行到 8:00:00,然后停止。然后,当用户将时间更改为 09:00:00 时。计时器应该运行到 13:00:00 等等。
如何实现?我无法运行一个 1 分钟的计时器来不断检查正确的时间,因为这对系统来说会非常繁重。
感谢所有帮助。提前谢谢你。
最佳答案
下面的方法根据提供的日期时间(即输入到文本框中的时间)启动一个带有间隔的初始计时器。当到达时间时,它会启动一个辅助计时器,从那时起每四个小时触发一次。
我使用了 System.Timers 计时器而不是 Sytem.Threading 计时器(因为具有讽刺意味的是 system.threading 计时器不是线程安全的!)
public void StartTimer(DateTime time)
{
const int fourHoursInMilliseconds = 4 * 3600 * 1000;
var fourHourTimer = new Timer() {Interval = fourHoursInMilliseconds};
fourHourTimer.Elapsed += (sender, e) =>
{
//code to handle the elapsed event here
};
var span = time - DateTime.Now;
var timer = new Timer {Interval = span.TotalMilliseconds, AutoReset = false};
timer.Elapsed += (sender, e) => { fourHourTimer.Start();};
timer.Start();
}
希望这就是您所需要的。
关于c# - 如何在特定时间的特定时间启动计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37656707/