winform 和会话超时
winform and session timeout
我有一个 vb.net winform,我想知道如何向它添加类似会话超时的东西。例如,我将 varialbe 设置为 10 分钟,在这 10 分钟内,如果没有 activity(没有 mouse/no 键盘交互),我想注销用户。谁能就如何使这项工作对这个主题有所启发?
第一个问题,为什么要在winform下做。这类东西我们一般在网页表单中使用。但是即使你想在 WinForms 中使用这些东西你也需要使用 Timer Class
。
每当你遇到 activity,你可以通过调用 Stop
然后立即调用 Start
来重置计时器。在 Timer's Tick
事件中放置任何代码(假设这是一个 System.Windows.Forms.Timer
),一切就绪。
如果您正在寻找一种检测应用程序外部输入的方法,Amit 的建议将行不通。
查看 Detecting idle users in Winforms if that is the case. Calling GetLastInputInfo()
并检查最后输入的值应该会让您有所收获。
如果您不担心用户离开您的应用程序并在不使用它后注销,请使用 Amit 的输入事件重置计时器的方法。
我建议您使用事件 Application.Idle
。
不需要 P/Invoke.
Public Class Form1
Private WithEvents _timer As Timer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 10 seconds for testing
Me._timer = New Timer With {.Interval = 10000, .Enabled = True}
AddHandler Application.Idle, AddressOf Me.Application_Idle
End Sub
Private Sub Application_Idle(sender As Object, e As EventArgs)
Me._timer.Stop()
Me._timer.Start()
End Sub
Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles _timer.Tick
Me._timer.Stop()
RemoveHandler Application.Idle, AddressOf Me.Application_Idle
' Do something to log the user out
Me.Close()
End Sub
End Class
我有一个 vb.net winform,我想知道如何向它添加类似会话超时的东西。例如,我将 varialbe 设置为 10 分钟,在这 10 分钟内,如果没有 activity(没有 mouse/no 键盘交互),我想注销用户。谁能就如何使这项工作对这个主题有所启发?
第一个问题,为什么要在winform下做。这类东西我们一般在网页表单中使用。但是即使你想在 WinForms 中使用这些东西你也需要使用 Timer Class
。
每当你遇到 activity,你可以通过调用 Stop
然后立即调用 Start
来重置计时器。在 Timer's Tick
事件中放置任何代码(假设这是一个 System.Windows.Forms.Timer
),一切就绪。
如果您正在寻找一种检测应用程序外部输入的方法,Amit 的建议将行不通。
查看 Detecting idle users in Winforms if that is the case. Calling GetLastInputInfo()
并检查最后输入的值应该会让您有所收获。
如果您不担心用户离开您的应用程序并在不使用它后注销,请使用 Amit 的输入事件重置计时器的方法。
我建议您使用事件 Application.Idle
。
不需要 P/Invoke.
Public Class Form1
Private WithEvents _timer As Timer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 10 seconds for testing
Me._timer = New Timer With {.Interval = 10000, .Enabled = True}
AddHandler Application.Idle, AddressOf Me.Application_Idle
End Sub
Private Sub Application_Idle(sender As Object, e As EventArgs)
Me._timer.Stop()
Me._timer.Start()
End Sub
Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles _timer.Tick
Me._timer.Stop()
RemoveHandler Application.Idle, AddressOf Me.Application_Idle
' Do something to log the user out
Me.Close()
End Sub
End Class