C#的NotifyIcon停留在托盘气球提示关闭后(C# NotifyIcon stays in t

2019-10-17 07:56发布

我的NotifyIcon的金球奖提示已经接近图标后仍停留在托盘。 它只有当我与我的鼠标光标悬停它消失。

我有一个有分量的类Notification.cs - NotifyIcon的。

我把它从我的控制台应用程序,我只是想显示通知,当某些条件得到满足。

一些代码:

  • 如何我所说的通知,从我的方案:

     Notification not = new Notification("Error occured, do this or that", "Some error", System.Windows.Forms.ToolTipIcon.Error); not.getIcon().ShowBalloonTip(1000); 
  • 通知类:

     public Notification(string baloonTipText, string baloonTipTitle, System.Windows.Forms.ToolTipIcon icon) : this() { this.icon.Visible = true; this.icon.BalloonTipText = baloonTipText; this.icon.BalloonTipTitle = baloonTipTitle; this.icon.BalloonTipIcon = icon; } public System.Windows.Forms.NotifyIcon getIcon() { return this.icon; } private void icon_BalloonTipClosed(object sender, EventArgs e) { this.icon.Visible = false; this.icon.Dispose(); } 

有任何想法吗?

Answer 1:

因为你在一个控制台应用程序运行时,你的icon_BalloonTipClosed处理程序不会当气囊顶端被关闭(无消息泵)调用。 您将需要调用Dispose手动或作为您的应用程序退出或设置一个计时器( System.Threading.TimerSystem.Windows.Forms.Timer比气球提示的超时超时时间将无法正常工作)。 例如:

timer = new Timer(state => not.getIcon().Dispose(), null, 1200, Timeout.Infinite);


Answer 2:

using System;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Reflection;
using System.Windows.Forms;

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

        private void btBallonToolTip_Click(object sender, EventArgs e)
        {
            ShowBalloonTip();
            this.Hide();
        }

        private void ShowBalloonTip()
        {
            Container bpcomponents = new Container();
            ContextMenu contextMenu1 = new ContextMenu();

            MenuItem runMenu = new MenuItem();
            runMenu.Index = 1;
            runMenu.Text = "Run...";
            runMenu.Click += new EventHandler(runMenu_Click);

            MenuItem breakMenu = new MenuItem();
            breakMenu.Index = 2;
            breakMenu.Text = "-------------";

            MenuItem exitMenu = new MenuItem();
            exitMenu.Index = 3;
            exitMenu.Text = "E&xit";

            exitMenu.Click += new EventHandler(exitMenu_Click);

            // Initialize contextMenu1
            contextMenu1.MenuItems.AddRange(
                        new System.Windows.Forms.MenuItem[] { runMenu, breakMenu, exitMenu });

            // Initialize menuItem1

            this.ClientSize = new System.Drawing.Size(0, 0);
            this.Text = "Ballon Tootip Example";

            // Create the NotifyIcon.
            NotifyIcon notifyIcon = new NotifyIcon(bpcomponents);

            // The Icon property sets the icon that will appear
            // in the systray for this application.
            string iconPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\setup-icon.ico";
            notifyIcon.Icon = new Icon(iconPath);

            // The ContextMenu property sets the menu that will
            // appear when the systray icon is right clicked.
            notifyIcon.ContextMenu = contextMenu1;

            notifyIcon.Visible = true;

            // The Text property sets the text that will be displayed,
            // in a tooltip, when the mouse hovers over the systray icon.
            notifyIcon.Text = "Morgan Tech Space BallonTip Running...";
            notifyIcon.BalloonTipText = "Morgan Tech Space BallonTip Running...";
            notifyIcon.BalloonTipTitle = "Morgan Tech Space";
            notifyIcon.ShowBalloonTip(1000);
        }

        void exitMenu_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        void runMenu_Click(object sender, EventArgs e)
        {
            MessageBox.Show("BallonTip is Running....");
        }
    }
}


文章来源: C# NotifyIcon stays in tray after the Balloon Tip has been closed
标签: c# notifyicon