C#清除已关闭应用程序的系统托盘图标

3

我使用 System.Windows.Forms.NotifyIcon 创建了托盘图标。

然而,当应用程序关闭后,图标会继续停留在那里,直到我手动将鼠标移动到上面。

我该如何防止它继续停留或在运行新实例时清除所有旧的图标?


如果您在应用程序关闭时不处理TrayIcon,就会发生这种情况。另一种情况是当您的应用程序崩溃时。但在这种情况下,所有使用托盘图标的其他应用程序都会发生这种情况,无论它们是用C#、C++还是任何其他可以生成Windows应用程序的语言编写的。 - Oliver
1个回答

8

我没有复现您的问题,我的计算机运行的是Windows 10创作者更新。

但是我发现当您关闭应用程序时,可以使用Dispose释放您的NotifyIcon。通过Dispose方法,您的图标将从任务栏托盘区域中移除。

我猜测您可能是意外退出了您的程序,这会导致出现您所遇到的问题。您应该检查是否有调用了System.Exit()或其他不安全的退出方法。

您可以查看下面的代码来了解如何调用Dispose方法:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnClosed(EventArgs e)
    {
        base.OnClosed(e);
        // Call Dispose to remove the icon out of notification area of Taskbar.
        notifyIcon1.Dispose();
    }
}

1
调试时,当我点击停止按钮时,应用程序会在不调用任何回调的情况下终止。那是它们建立的时候。有没有办法停止它呢? - John
Windows无法处理NotifyIcon的显示或隐藏,即使整个进程退出也是如此。Windows API Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA lpdata)是唯一控制它的方法。 - walterlv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接