Winforms 中系统托盘中的多个通知图标

8
也许我的问题是这个问题的重复:多个图标在托盘中打开。 在我的winforms应用程序中,当窗体关闭时,我会在系统托盘中显示该应用程序,即关闭窗体后应用程序不会退出,但在单击应用程序右键单击上下文菜单中的“关闭”时退出系统托盘。

但是,在使用应用程序时,我注意到有更多的通知图标在系统托盘中。 但是,一旦我将鼠标悬停在它们上面,它们就都消失了,除了正在运行的应用程序之外的那个。 我已经尝试了每种方法来消除多个图标,但是我无法做到。

以下是我的代码:用于最小化到系统托盘

public void MinimizeToTray()
        {
            try
            {
                this.WindowState = FormWindowState.Minimized;
                TrayIcon.Visible = true;
                TrayIcon.ShowBalloonTip(1000);
                ShowInTaskbar = false;
                //this.Activate();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

在表单加载时,我添加了以下代码

private void LoadTrayMenu()
        {
            TrayMenu.Items.Add("Reminder");
            TrayMenu.Items.Add("Close");
            TrayMenu.Items[0].Click += new EventHandler(this.Reminder_Click);
            TrayMenu.Items[1].Click += new System.EventHandler(this.Dispose_Click);
            TrayIcon.ContextMenuStrip = TrayMenu;
        }

“dispose”事件如下所示。
private void Dispose_Click(object Sender, EventArgs e)
        {
            TrayIcon.Visible = false;
            TrayIcon.Icon = null;
            TrayIcon.Dispose();
            this.Dispose();
        }

当我点击图标时,我编写了以下代码。
private void TrayIcon_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {

                this.Show();
                this.WindowState = FormWindowState.Normal;
                TrayIcon.Visible = false;
                //TrayIcon.Icon = null;
                //TrayIcon.Dispose();
                ShowInTaskbar = true;
            }
        }

我尝试清除通知图标,但这也没有帮助我。我是否忽略了一些非常显而易见的东西?任何帮助将不胜感激。

你解决了吗?请告诉我你是怎么做到的,因为我还没解决。谢谢。 - Alejandro del Río
2个回答

1
在这个方法中添加Application.Exit()
private void Dispose_Click(object Sender, EventArgs e)
        {
            TrayIcon.Visible = false;
            TrayIcon.Icon = null;
            TrayIcon.Dispose();
            Application.Exit()
        }

你不需要使用 this.Dispose,因为它将在 Application.Exit() 中被调用。
在任务管理器中检查进程是否仍在运行,如果是,则结束它并查看图标是否消失。

Application.Exit(0) 显示为无效参数,我们不能使用 Application.Exit(); 吗? - Vikneshwar
此外,您提供的方法是针对关闭事件的。但即使我不关闭应用程序,当我多次最小化和恢复正常状态时,我仍然可以在系统托盘中找到许多图标。我该怎么处理? - Vikneshwar
是的,谢谢。但我发现有个拼写错误。所以我继续使用Application.Exit(); - Vikneshwar
我采用了您添加Application.Exit()的想法,但效果不佳,我仍然可以看到系统托盘中出现了多个图标。 - Vikneshwar

0

图标只会留在通知区域,当鼠标悬停时消失,因为应用程序没有干净地退出。您是正在退出应用程序还是在VS中停止调试?当抛出异常并且应用程序突然退出时也会发生这种情况。


我正在退出应用程序。有没有办法解决这个问题? - Vikneshwar

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