我尝试使用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();
}
}
}
答案 0 :(得分:2)
问题是UWP应用在最小化时会进入suspended mode:
当用户最小化应用程序时,Windows等待几秒钟才能看到 用户是否会切换回它。如果他们不换回来 在这个时间窗口内,没有扩展执行,后台任务, 或活动赞助执行处于活动状态,Windows暂停应用程序。 只要没有锁定屏幕,应用程序也会暂停 扩展执行会话等在该应用程序中处于活动状态。
附加调试器时不会发生这种情况,但您可以使用调试位置工具栏( Ctrl + Q )来模拟此行为输入调试位置或点击查看 - > 工具栏 - > 调试位置。
当您的应用程序最小化时,Application.Suspending
事件会被调用,您可以处理它以释放任何资源或停止计时器,同时应用程序处于睡眠状态"。
还可以让应用程序在最小化时完全运行。有关此内容的更多信息,请参阅documentation。但是,最好的选择是尽可能降低后台应用程序的使用率,并将后台任务用于长时间运行的进程。