经过大量谷歌搜索并花费 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);
};
}
最佳答案
如果您的问题是“是否有更好的方法来实现 session 超时?” - 然后我会说,可能 - 这就是我的做法。
session 超时可以做两件事之一。它可以像街机游戏一样工作,您可以在超时时间内完成任务。或者它可以监视不活动并在没有任何反应时关闭。
无论哪种方式,我都会将此功能包装到 session 提供程序中 - 假设 MVVM 是目标,我使用提供程序来引用某种服务或数据源。
提供者被实例化为单例,因此在整个应用程序生命周期中作为一个实例存在。我通常通过在 app.xaml 中创建它来管理它。然后,我使用 MVVM light 等消息框架与提供者进行交互。
创建后,提供程序会管理一个线程,该线程检查日期时间以查看它是否发生在过去。如果它这样做,它会通过事件或消息发出 session 。此消息由您的应用程序选择以关闭或其他任何方式。
如果你想要一个有限的时间段或时间,你可以实现一个开始消息,它根据你想要运行的时间跨度将监视的日期时间设置为 future 的某个时间点。如果您想要不活动注销,那么您可以从您认为合适的任何用户交互中发送此消息,以防止注销,例如输入更改或 ICommand 执行。
我更进一步,因此我的提供商还会在超时完成前几秒发出“结束”消息,这样我就可以显示警告 - 但希望您能理解总体思路。
如果这听起来像您想要的,那么我将添加一些示例,但到目前为止还没有添加示例,以防这不是您要的。
关于c# - 不活动和事件,应用程序空闲,用户不活动自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25516505/