【问题标题】:Inactivity and activity ,application idle , user-inactivity auto logout不活动和活动,应用程序空闲,用户不活动自动注销
【发布时间】:2014-10-20 09:49:43
【问题描述】:

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

【问题讨论】:

  • 你的问题是什么?
  • 您可以在codereview.stackexchange.com进行代码审查
  • 自我回答会更好。不要把答案放在问题中:)

标签: c# wpf logout user-inactivity


【解决方案1】:

如果您的问题是“是否有更好的方法来实现会话超时?” - 那么我会说,可能 - 我就是这样做的。

会话超时可以做两件事之一。它可以像街机游戏一样工作,您可以在其中完成任务的超时时间。或者它可以监视不活动并在没有任何反应时关闭。

无论哪种方式,我都会将此功能包装到会话提供程序中 - 假设 MVVM 是目标,我使用提供程序来引用某种服务或数据源。

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

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

如果您想要一个有限的时间段或时间,您可以实现一条启动消息,根据您要运行的时间跨度将监控的日期时间设置为未来的某个时间点。如果您想退出不活动状态,则可以从您认为合适的任何用户交互中发送此消息,以防止退出,例如输入更改或 ICommand 执行。

我更进一步,因此我的提供商还会在超时完成前几秒钟发出“结束”消息,以便我可以显示警告 - 但希望您能大致了解。

如果这听起来像您所追求的,那么我将添加一些示例,但到目前为止还没有,以防这不是您所要求的。

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2014-09-28
    • 2011-03-05
    • 2023-03-27
    相关资源
    最近更新 更多