【问题标题】:Show system time upto minute on UWP UI在 UWP UI 上显示最多分钟的系统时间
【发布时间】:2019-12-08 00:46:28
【问题描述】:

我只想在 UWP 中显示当前时间最多分钟。时间需要与系统时间同步,这样系统时间和App时间才能显示精确到分钟的时间。

我为此使用计时器。初始间隔基于当前时间。

private const string TIME_FORMAT = "hh:mm";

        private static int TIMER_INTERVAL_ONE_MINUTE = 60 * 1000;
        private static Timer countdownTimer;
        private static DateTime liveDateTime = DateTime.Now;
        private static bool isTimerRunning = false;
        static ViewModel()
        {
            countdownTimer = new Timer();
            countdownTimer.Elapsed += CountdownTimer_Elapsed;
            countdownTimer.Interval = TIMER_INTERVAL_ONE_MINUTE - DateTime.Now.Second;
            countdownTimer.Start();
            isTimerRunning = true;
        }

private static void CountdownTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            ApplicationDispatcher.RunOnUIThread(() =>
            {
                liveDateTime = DateTime.Now;
                countdownTimer.Interval = TIMER_INTERVAL_ONE_MINUTE;
            });
        }

但有时我的 UI 与 System 不同步,因为语句也需要一些时间来执行,哪些情况最初设置不正确,只有一小部分。 我不想太频繁地运行我的计时器。

如何通过同步系统时间显示最长达分钟的时间。

问候

【问题讨论】:

    标签: java c# uwp timer


    【解决方案1】:

    从您的代码中,您只是分配变量,这不需要使用 Thread 完成。

    在UWP中,获取当前时间的方法是通过DateTime.Now。如果要将当前时间保存为变量并保持更新,则需要一个计时器。

    我们推荐在UWP app中使用DispatcherTimer,它是一个运行在UI线程上的定时器,可以这样写:

    private DispatcherTimer _timer;
    private static DateTime liveDateTime = DateTime.Now;
    public ViewModel()
    {
        _timer = new DispatcherTimer();
        _timer.Interval = TimeSpan.FromSeconds(1);
        _timer.Tick += Timer_Tick;
        _timer.Start();
        // other code ...
    }
    
    private void Timer_Tick(object sender, object e)
    {
        liveDateTime = DateTime.Now;
    }
    

    由于不知道何时启动计时器,使用一分钟作为计时间隔可能会导致延迟。建议将定时器间隔缩短到 10 秒或更短。

    最好的问候。

    【讨论】:

    • 我知道这一点。我想每隔 1 分钟运行一次计时器,否则如果我每秒运行一次计时器会浪费资源。
    • 我理解你的想法,但除非你从 0 秒开始计数,否则一分钟的间隔计时器必然会导致延迟。其实,如果只显示时间,不做其他事情,对系统资源的影响是微乎其微的
    猜你喜欢
    • 2019-08-10
    • 1970-01-01
    • 2016-07-20
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多