c# - 不活动和事件,应用程序空闲,用户不活动自动注销

标签 c# wpf logout user-inactivity

经过大量谷歌搜索并花费 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/

相关文章:

c# - 我的 Web 应用程序在哪个端口上运行 asp.net C#

c# - 针对多个值测试变量?

c# - 如何编写等待 selenium webElement 的通用方法

c# - 为什么我的 WPF menuItem 图标不显示?

c# - 如何在 WebBrowser 控件中注入(inject) Javascript

firebase - 在 iOS 上注销和登录 firebase 身份验证后,Firestore 调用 setData 将不会进入完成 block

ios - 注销Facebook并在Corona中清除 session

Delphi:注销应用程序时表单无法释放时该怎么办

c# - Web 应用程序 Active Directory 用户角色与 User.IsInRole

c# - 单元测试验证规则