c# – 没有链接到UI的UWP应用程序中的计时器

我正在研究一个UWP MVVM项目,并希望实现自动注销系统,如果用户交互停止一段特定的时间.
直到现在,我正在使用一个dispatcherTimer从每秒200次倒数.
TimerLeave = 200;
var _dispatcherTimer = new dispatcherTimer();
_dispatcherTimer.Tick += dispatcherTimer_Tick;
_dispatcherTimer.Interval = new TimeSpan(0,1);

_dispatcherTimer.Start();

但是因为dispatcherTimer被链接
与UI和我正在构建一个MVVM应用程序,我正在寻找一种替代方案.
我搜了一下,发现了Run a background task on a timer.问题是
该定时器只能设置为每15分钟运行一次,这在我的情况下自动注销用户有一点太长时间.我发现没有解决办法减少15分钟.
所以我的问题是,是否有可能在UWP项目中设置一个没有链接到UI并且可以设置变量的计时器?

解决方法

是的 – 你可以使用 Timer class – 尽管你必须记住它运行在单独的线程上.例:
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调度程序上发送的工作可能不会马上处理 – 这取决于调度程序的工作负载.

还要记住,这个计时器与你的应用程序一起运行,并且在应用程序被暂停时不起作用.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...