不活动和活动,应用程序空闲,用户不活动自动注销



经过大量的谷歌搜索和4个小时的时间,我想这是发现用户处于非活动状态并锁定屏幕的最佳方法。

public MainWindow()
    {
        InitializeComponent();
        var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(10) };
        timer.Tick += delegate
        {
            timer.Stop();
            MessageBox.Show("Logoff trigger");
            timer.Start();
        };
        timer.Start();
        InputManager.Current.PostProcessInput += delegate(object s, ProcessInputEventArgs r)
        {
            if (r.StagingItem.Input is MouseButtonEventArgs || r.StagingItem.Input is KeyEventArgs)
                timer.Interval = TimeSpan.FromSeconds(10);
        };
    }

如果你的问题是,"有更好的方法来实现会话超时吗?"-那么我可能会说,这就是我的做法。

会话超时可以做两件事之一。它可以像街机游戏一样工作,你有一个超时时间来完成任务。或者,它可以监视是否处于非活动状态,如果什么都没有发生,则关闭。

无论哪种方式,我都会将此功能封装到会话提供者中——假设MVVM是目标,我会使用提供者来指代某种服务或数据源

提供程序被实例化为单例,因此在整个应用程序生命周期中作为一个实例存在。我通常通过在app.xaml中创建它来管理它。然后,我使用消息框架(如MVVM light)与提供者进行交互。

一旦创建,提供程序就会管理一个线程,该线程会检查日期时间以查看它是否发生在过去。如果它这样做了,它会通过事件或消息发出会话。此消息由您的应用程序接收以关闭或其他任何操作。

如果您想要一个有限的周期或时间,您可以实现一个开始消息,根据您想要运行的时间跨度将监控的日期时间设置为未来的某个点。如果您想要非活动注销,那么您可以从您认为合适的任何用户交互中发送此消息,以防止注销,例如输入更改或执行ICommand。

我更进一步,这样我的提供者也会在超时完成前几秒发出一条"结束"消息,这样我就可以显示警告了——但希望你能大致了解。

如果这听起来像你想要的,那么我会添加一些例子,但到目前为止还没有,以防这不是你想要的。

最新更新