【问题标题】:Detect no navigation in windows 8 metro在 Windows 8 Metro 中检测到没有导航
【发布时间】:2012-10-05 08:55:22
【问题描述】:

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

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

最好的问候

【问题讨论】:

  • 你是怎么编码的?使用 MVVM 还是使用代码隐藏?你能提供一个你如何导航的代码示例吗?

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


【解决方案1】:
  • OnNavigatedTo 函数中启动计时器。
  • OnNavigatedFrom 函数中重置计时器。
  • 计时器到期后返回

您可以使用DispatcherTimer

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

【讨论】:

    【解决方案2】:

    有两种方法。

    首先是使用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();
    

    两个都可以

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      相关资源
      最近更新 更多