当UWP应用最小化时,CreatePeriodicTimer不更新UI

时间:2018-03-27 13:37:59

标签: uwp

我尝试使用UWP app中的CreatePeriodicTimer更新带有示例日期时间场景的UI。

当应用程序处于前台时,我看到它有效,当它被最小化时,它会停止触发事件。

但是在调试模式下,即使应用程序最小化,计时器也会触发并更新UI,但在发布模式下不会发生。

我还需要知道它在最小化模式下的更新方式。

namespace PeriodicPolling
{
    class Poller
    {
        public static Poller _instance = null;
        ThreadPoolTimer _timer = null;
        public static MainPage UpdatePage { get; set; }
        public static Poller GetInstance()
        {
            if (_instance == null)
            {
                _instance = new Poller();
            }
            return _instance;
        }
        public void StartPoll()
        {
            _timer = ThreadPoolTimer.CreatePeriodicTimer(PollAndUpdateData, TimeSpan.FromSeconds(10));
        }
        async void PollAndUpdateData(ThreadPoolTimer timer)
        {
            DateTime dateTime = DateTime.Now;
            await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync
                (CoreDispatcherPriority.High,
                    new DispatchedHandler(() =>
                    {
                        UpdatePage.MyBlock.Text = dateTime.ToString();
                    }
                ));
        }
        public void StopPoll()
        {
            _timer.Cancel();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

问题是UWP应用在最小化时会进入suspended mode

  

当用户最小化应用程序时,Windows等待几秒钟才能看到   用户是否会切换回它。如果他们不换回来   在这个时间窗口内,没有扩展执行,后台任务,   或活动赞助执行处于活动状态,Windows暂停应用程序。   只要没有锁定屏幕,应用程序也会暂停   扩展执行会话等在该应用程序中处于活动状态。

附加调试器时不会发生这种情况,但您可以使用调试位置工具栏( Ctrl + Q )来模拟此行为输入调试位置或点击查看 - > 工具栏 - > 调试位置

当您的应用程序最小化时,Application.Suspending事件会被调用,您可以处理它以释放任何资源或停止计时器,同时应用程序处于睡眠状态"。

还可以让应用程序在最小化时完全运行。有关此内容的更多信息,请参阅documentation。但是,最好的选择是尽可能降低后台应用程序的使用率,并将后台任务用于长时间运行的进程。

相关问题