首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WinRT定时注销

WinRT定时注销
EN

Stack Overflow用户
提问于 2013-09-18 14:09:43
回答 2查看 389关注 0票数 3

我正在开发一个WinRT应用程序。其中一个要求是,应用程序应该具有“超时注销”功能。这意味着,在任何屏幕上,如果应用程序已经空闲了10分钟,应用程序应该注销并导航回主屏幕。

这样做的强力方法显然是将每个页面的每个网格上的按下的指针事件连接起来,并在触发这些事件时重置计时器,但我想知道是否有一种更优雅和更可靠的方法。

谢谢你,拉杰夫

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-18 17:49:03

通过使用DispatcherTimer &几个事件,您可以实现这一点。

代码语言:javascript
复制
DispatcherTimer Timer;
private void InitializeTimer()
{
    Dispatcher.AcceleratorKeyActivated += Dispatcher_AcceleratorKeyActivated;
    Window.Current.CoreWindow.PointerMoved += CoreWindow_PointerMoved;
    Window.Current.CoreWindow.PointerPressed += CoreWindow_PointerPressed;

    Timer = new DispatcherTimer();
    Timer.Interval = TimeSpan.FromMinutes(10);
    Timer.Tick += Timer_Tick;
    Timer.Start();
}

private void CoreWindow_PointerPressed(CoreWindow sender, PointerEventArgs args)
{
    Timer.Start();
}

private void CoreWindow_PointerMoved(CoreWindow sender, PointerEventArgs args)
{
    Timer.Start();
}

private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)
{
    Timer.Start();
}

private void Timer_Tick(object sender, object e)
{
    Timer.Stop();
    //TODO: Do logout.
}
票数 3
EN

Stack Overflow用户

发布于 2013-09-18 17:20:30

我不知道内置的任何内容,但我建议您不要附加到Grid等,而是建议您将事件处理程序附加到当前的CoreWindow (文档)中,以便跟踪各种类型的事件以确定是否懒惰。

例如,如果您确实附加到Grid,您会发现使用Popup的控件不会触发事件。例如,事件处理程序不会跟踪ComboBox

例如,您可以这样做:

代码语言:javascript
复制
var core = CoreWindow.GetForCurrentThread();
core.KeyDown += (sender, kdArgs) => { 
    // reset timeout
};
core.PointerMoved = core.PointerMoved = (sender, pmArgs) {
   // reset timeout (maybe with a bit of logic to prevent tiny mouse drift from
   // causing false positives
}; 

// etc. (whatever else makes sense)

代码依赖于GetForCurrentThread调用(文档),它返回作为所有内容的宿主的CoreWindow实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18874516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档