Наконечник воздушного шара 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
недвижимость по завершении.