VB.NET WinForms应用自动超时关闭(释放许可证)实现咨询
VB.NET Windows Forms 实现15分钟无操作自动关闭功能
核心思路
使用System.Windows.Forms.Timer控件实现超时逻辑:
- 初始化计时器,设置15分钟(900000毫秒)的间隔
- 监听用户的鼠标、键盘交互,一旦有操作就重置计时器
- 计时器触发时,自动关闭应用并释放许可证资源
- 用户完成操作后,可手动停止计时器,避免自动关闭
实现步骤与示例代码
1. 窗体设计与控件配置
在WinForms窗体中添加一个Timer控件(命名为idleTimer),可通过工具箱拖拽或代码初始化。
2. 完整代码示例
Imports System.Windows.Forms Public Class MainForm ' 定义超时时间:15分钟 = 15*60*1000 = 900000毫秒 Private Const TimeoutMilliseconds As Integer = 900000 Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' 初始化计时器 idleTimer.Interval = TimeoutMilliseconds idleTimer.Start() End Sub ' 计时器触发事件:超时后关闭应用并释放许可证 Private Sub idleTimer_Tick(sender As Object, e As EventArgs) Handles idleTimer.Tick ' 先执行许可证释放逻辑,根据实际需求调整 ReleaseLicenseResource() ' 关闭应用 Application.Exit() End Sub ' 重置计时器的通用方法 Private Sub ResetIdleTimer() If idleTimer.Enabled Then idleTimer.Stop() idleTimer.Start() End If End Sub ' 监听鼠标移动事件,重置计时器 Private Sub MainForm_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove, btnCompleteOperation.MouseMove, txtInput.MouseMove ResetIdleTimer() End Sub ' 监听键盘按键事件,重置计时器 Private Sub MainForm_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress, txtInput.KeyPress ResetIdleTimer() End Sub ' 用户完成操作后,手动取消超时(比如点击"完成"按钮) Private Sub btnCompleteOperation_Click(sender As Object, e As EventArgs) Handles btnCompleteOperation.Click ' 执行操作完成逻辑 CompleteUserOperation() ' 停止计时器,不再触发自动关闭 idleTimer.Stop() End Sub ' --- 以下是示例业务逻辑,根据实际需求替换 --- Private Sub ReleaseLicenseResource() ' 编写释放许可证资源的代码,比如断开连接、释放锁等 MessageBox.Show("应用超时,已释放许可证资源", "超时提示", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Private Sub CompleteUserOperation() ' 编写用户完成操作后的逻辑,比如保存数据、提交请求等 MessageBox.Show("操作完成,已取消自动超时", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub End Class
关键说明
- 交互事件监听:要确保所有用户可能操作的控件都添加到
MouseMove和KeyPress的事件处理中,避免遗漏导致计时器不重置。 - 许可证释放:
ReleaseLicenseResource方法需要替换为实际的资源释放逻辑,必须在应用关闭前执行,确保资源被正确释放。 - 手动取消超时:用户完成操作后,通过点击按钮等方式调用
idleTimer.Stop(),停止计时器,避免应用被自动关闭。 - 计时器状态管理:重置计时器时先停止再启动,确保计时从当前时间重新开始。
内容的提问来源于stack exchange,提问作者Tleilax
相关产品推荐
相关产品推荐

