我正在开发一个UWP MVVM项目,并希望在用户交互停止一段特定时间时实现自动注销系统.
到现在为止,我DispatcherTimer
每秒使用a 从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解决方案有什么优势,但它运行良好.