在Windows 8 metro中检测无导航

时间:2012-10-05 08:55:23

标签: c# xaml microsoft-metro windows-runtime

我正在开发我的第一个Windows 8应用程序。我需要检测用户是否已经停止导航3分钟并重定向到主页。

你有任何想法如何做到这一点(我在这个应用程序中使用XAML)??

祝你好运

2 个答案:

答案 0 :(得分:0)

  • OnNavigatedTo功能中启动计时器。
  • 重置OnNavigatedFrom功能中的计时器。
  • 当计时器到期时导航回来

您可以使用DispatcherTimer

    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = TimeSpan.FromMinutes(3);
    timer.Tick += (s,e) => GoBack();
    timer.Start(); 

答案 1 :(得分:0)

有两种方式。

首先是使用Reactive Extensions

private static void Main()
{
    Console.WriteLine(DateTime.Now);

    // create a single event in 10 seconds time
    var observable = Observable.Timer(TimeSpan.FromSeconds(10)).Timestamp();

    // raise exception if no event received within 9 seconds
    var observableWithTimeout = Observable.Timeout(observable, TimeSpan.FromSeconds(9));

    using (observableWithTimeout.Subscribe(
        x => Console.WriteLine("{0}: {1}", x.Value, x.Timestamp), 
        ex => Console.WriteLine("{0} {1}", ex.Message, DateTime.Now)))
    {
        Console.WriteLine("Press any key to unsubscribe");
        Console.ReadKey();
    }

    Console.WriteLine("Press any key to exit");
    Console.ReadKey();
}

第二种方法是创建一个计时器,用于检查当前日期与您记录上次导航活动的日期。它的效率远远低于RX,但您可能更喜欢它。我会将计时器放在App.XAML.cs中,以便全局处理。这样更容易。

var _Timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
_Timer.Tick += (s, args) =>
{
    if (m_LastNavigationDate.Add(TimeSpan.FromMinutes(3)) < DateTime.Now)
        RaiseTimeout();
};
_Timer.Start();

要么工作