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

VB.NET中隐藏NotifyIcon托盘图标后保留通知面板记录的问题

解决VB.NET NotifyIcon移除托盘图标同时保留通知面板记录的问题

核心原因:Windows系统中,NotifyIcon的气泡通知与托盘图标实例强绑定,若在气泡关闭后立刻隐藏或销毁图标,系统会同步清除通知面板内的对应通知记录。要实现保留通知的需求,需延迟处理图标的销毁操作,给系统足够时间将通知持久化到通知中心。

修改后的代码实现

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim n As New Notification("我需要一块蛋糕!", "饥饿提示", ToolTipIcon.Info, Me.Icon)
    n.ShowBalloon()
End Sub
Class Notification
    Private ni As System.Windows.Forms.NotifyIcon
    Private delayTimer As System.Windows.Forms.Timer ' 新增延迟定时器

    Public Sub New(text As String, title As String, icon As ToolTipIcon, ic As Icon)
        Me.ni = New System.Windows.Forms.NotifyIcon
        ni.Icon = ic
        ni.BalloonTipText = text
        ni.BalloonTipTitle = title
        ni.BalloonTipIcon = icon
        ni.Visible = True

        ' 初始化延迟定时器
        delayTimer = New Timer()
        delayTimer.Interval = 2000 ' 延迟2秒,可根据需求调整
        AddHandler delayTimer.Tick, AddressOf OnDelayTick
        AddHandler ni.BalloonTipClosed, AddressOf BalloonClosed
    End Sub

    Public Sub ShowBalloon()
        ni.ShowBalloonTip(20000)
    End Sub

    Private Sub BalloonClosed(sender As Object, e As System.EventArgs)
        ' 启动定时器,延迟执行图标销毁
        delayTimer.Start()
    End Sub

    Private Sub OnDelayTick(sender As Object, e As EventArgs)
        delayTimer.Stop()
        ni.Visible = False
        ni.Dispose()
        delayTimer.Dispose() ' 销毁定时器
    End Sub
End Class

关键说明

  • 新增Timer组件,设置合理的延迟时间(示例为2秒),确保系统完成通知的持久化后再处理图标。
  • 不要在BalloonTipClosed事件中直接操作图标,而是通过定时器延迟执行,避免通知被连带清除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:22