【问题标题】:Notify Icon stays in System Tray on Application Close通知图标在应用程序关闭时停留在系统托盘中
【发布时间】:2012-06-11 12:22:30
【问题描述】:

我有一个只能从系统托盘运行的应用程序,它的唯一目的是通过 Ballon Tips 向用户提供信息。

除了一点小烦恼之外,它运行良好。当应用程序使用任务管理器(而不是使用上下文菜单)关闭时,图标会停留在系统托盘中,直到您将鼠标悬停在它上面,然后当另一个实例打开时,您会在第一个实例旁边看到第二个图标。

我的 Form Closed 事件看起来像这样,它什么也不做:

private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
    ntfyIcon.Visible = false;
    ntfyIcon.Icon = null;
    ntfyIcon.Visible = false;
    ntfyIcon.Dispose();
}

这个has been reported on Microsoft Connect 已被微软在Won't Fix 下关闭,因为显然这是应该发生的,但我希望有人有解决方案。

我正在考虑在应用程序打开时清理系统托盘?

谢谢

【问题讨论】:

  • 这是预期行为 - 它会影响 每个 将图标放入系统托盘的程序,而不仅仅是您的。并且没有与通知区域交互的 API。
  • 我也很害怕,我刚刚经历了一个“我知道,其中一位天才”在堆栈溢出时会发现这一点的时刻
  • 找到一篇回答了我的问题的博文 - tinyurl.com/notificationarea
  • 为什么要使用任务管理器关闭应用程序?当您终止应用程序时,赌注将被取消,不会发生任何清理。
  • 我不会通过任务管理器关闭应用程序,也不会建议其他人这样做。但是,人们无论如何都会这样做,并且会留下这些图标。是的,这对关闭应用程序没有帮助,但在打开应用程序时效果很好。

标签: .net notifyicon


【解决方案1】:

对我来说,在将Icon 设置为null 并处理NotifyIcon 之后调用Application.DoEvents() 时有效。

private void frmMain_FormClosed(object sender, FormClosedEventArgs e)
{
    ntfyIcon.Icon = null;
    ntfyIcon.Dispose();
    System.Windows.Forms.Application.DoEvents();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多