C#NofityIcon气球提示并不总是在指定时间内消失

时间:2011-11-23 11:34:17

标签: c# notifyicon

我以相当简单的方式使用NotifyIcon。

public class Popup
{
    ...
    private static NotifyIcon ni;

    static Popup()
    {
        ni = new NotifyIcon();
        ni.Icon = SystemIcons.Information;
    }

    public Popup(string nexusKey)
    {
        ...
    }

    public void make(string text)
    {
        try
        {
           ...
        }
        catch
        {
            ni.Visible = true;
            ni.ShowBalloonTip(1000, "Thats the title", text, ToolTipIcon.Info);
        }

    }
}

问题是,如果我关注的是不同于托管显示气球的进程的窗口,那么“活着”计时器似乎无法启动。关于如何确保气球在1秒后消失的任何想法,无论如何?

1 个答案:

答案 0 :(得分:4)

此行为的部分原因是ShowBalloonToolTip中使用的计时器仅在操作系统检测到用户输入时运行。因此,如果您只是等待气球消失而实际上没有做任何事情,那么它将永远不会超时。

我认为理由是,如果你离开电脑并在一小时后回来,那么你就不会错过任何通知。

有一种解决方法,那就是运行一个单独的计时器来切换图标的可见性。

例如:

private void ShowBalloonWindow(int timeout)
        {
            if (timeout <= 0)
                return;

            int timeoutCount = 0;
            trayIcon.ShowBalloonTip(timeout);

            while (timeoutCount < timeout)
            {
                Thread.Sleep(1);
                timeoutCount++;
            }

            trayIcon.Visible = false;
            trayIcon.Visible = true;
        }

修改

啊,是的 - 我一起拼凑了这些,而没有考虑你是如何使用它的。 如果您希望异步运行,那么我建议您将计时器放在一个工作线程中,Invokes一个方法可以在完成时切换trayIcon.Visible属性。