c# - 如何在特定时间的特定时间启动计时器?

标签 c# wpf timer

场景如下:

有一个文本框,用户可以在其中输入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/

相关文章:

c# - 枚举 JumpList 最近的文件?

c# - 如何避免闪烁按钮WPF

java - 棋钟时间递减

c - 哪个内核函数调用了用户空间中实现的 timer_settime() 和定时器处理程序?

c# - AlarmManager 在五秒后几乎立即触发

c# - 使用调解器模式进行单元测试 - 所有私有(private)到公共(public)

c# - WPF 将 DataGrid 组合框所选项目绑定(bind)到所选 DataGridRow 的数据上下文

c - 我在 Windows 上用 C 语言做了高分辨率计时?谁能指导我在 2 毫秒内调用特定函数?

C# 使用 selectedValue 设置组合项

c# - 使用tcp将 float 组从c++发送到c#