不活动和活动,应用程序空闲,用户不活动自动注销
本文关键字:不活动 注销 用户 活动 应用程序 | 更新日期: 2023-09-27 18:19:41
经过大量的谷歌搜索和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。
我更进一步,这样我的提供者也会在超时完成前几秒发出一条"结束"消息,这样我就可以显示警告了——但希望你能大致了解。
如果这听起来像你想要的,那么我会添加一些例子,但到目前为止还没有,以防这不是你想要的。