You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET 用FormClosing实现最小化到托盘后Application.Exit()失效如何解决

解决方案

通过增加类级标志位区分关闭事件的触发来源,即可实现需求,具体实现如下:

  1. 在窗体类的全局区域(所有方法外部)声明布尔标记位,用来标识当前是否是主动发起退出操作:
Private _isExitRequested As Boolean = False
  1. 修改Quit按钮的点击事件逻辑,用户确认退出后先将标记位设为True,再执行退出:
Private Sub btn_Quit_Click(sender As Object, e As EventArgs) Handles btn_Quit.Click
    Dim confirm As DialogResult = MessageBox.Show("你确定要退出应用吗?", "退出确认", MessageBoxButtons.YesNo)
    If confirm = DialogResult.Yes Then
        _isExitRequested = True
        Application.Exit()
    End If
End Sub
  1. 调整FormClosing事件逻辑,执行最小化到托盘逻辑前先判断标记位,主动退出的场景直接跳过最小化逻辑,允许窗体正常关闭:
Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    ' 主动退出时直接放行,不执行最小化逻辑
    If _isExitRequested Then
        Return
    End If
    ' 原有最小化到托盘逻辑保留
    NotifyIcon1.Visible = True
    NotifyIcon1.Icon = SystemIcons.Application
    NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
    NotifyIcon1.BalloonTipTitle = "后台运行中"
    NotifyIcon1.BalloonTipText = "应用正在后台运行,双击托盘图标即可恢复窗口"
    NotifyIcon1.ShowBalloonTip(50000)
    Me.Hide()
    ShowInTaskbar = True
    e.Cancel = True
End Sub

补充说明

不推荐使用End强制终止进程,该方法会跳过正常的资源释放流程,容易出现资源泄漏问题。上述标志位方案完全贴合.NET的事件驱动设计逻辑,兼容性和稳定性更好。

内容的提问来源于stack exchange,提问作者charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:24:04