Наконечник воздушного шара C# NofityIcon не всегда исчезает в течение указанного времени

Я использую 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 ответ

Решение

Одна из причин такого поведения заключается в том, что таймер, используемый в 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 недвижимость по завершении.

Другие вопросы по тегам