这是场景:
有一个Textbox该用户输入在该时间中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();
}
Run Code Online (Sandbox Code Playgroud)
希望这是您所需要的。