UWP App中的计时器未链接到UI

我正在开发一个UWP MVVM项目,并希望在用户交互停止一段特定时间时实现自动注销系统。
到目前为止,我正在使用DispatcherTimer从每秒200个向后计数。

 TimerLeave = 200; var _dispatcherTimer = new DispatcherTimer(); _dispatcherTimer.Tick += dispatcherTimer_Tick; _dispatcherTimer.Interval = new TimeSpan(0, 0, 1); _dispatcherTimer.Start(); 

但是因为DispatcherTimer与UI链接而我正在构建MVVM应用程序,所以我正在寻找替代方案。
我搜索了一下,发现在计时器上运行后台任务 。 问题是这个计时器只能设置为每15分钟运行一次,这在我的情况下自动注销用户有点太长了。 我找不到减少15分钟的解决方法。
所以我的问题是,是否有可能在UWP项目中设置一个没有链接到UI并且可以设置变量的计时器?

是的 – 例如,您可以使用Timer类 – 但您必须记住它在单独的线程上运行。 例:

 private Timer timer; public MainPage() { this.InitializeComponent(); timer = new Timer(timerCallback, null, (int)TimeSpan.FromMinutes(1).TotalMilliseconds, Timeout.Infinite); } private async void timerCallback(object state) { // do some work not connected with UI await Window.Current.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { // do some work on UI here; }); } 

请注意,在UI调度程序上调度的工作可能不会立即处理 – 它取决于调度程序的工作负载。

还要记住,此计时器与您的应用程序一起运行,并且在应用程序暂停时无法运行。

我最近使用ThreadPoolTimer类解决了这个问题。

 ThreadPoolTimer timer = ThreadPoolTimer.CreatePeriodicTimer((t) => { //do some work \ dispatch to UI thread as needed }, TimeSpan.FromMinutes(1)); 

目前我不知道这已经发布的Timer解决方案有什么优势,但它运行良好。