У меня есть значок NotifyIcon, который отображается на панели задач, и я хочу показать всплывающую подсказку при первом запуске приложения (как предлагается здесь: Выполнить код C # после application.run ()), но событие Idle происходит до того, как значок появляется на панели задач, в результате чего всплывающее сообщение не появляется. Как я могу заставить NotifyIcon появляться перед вызовом ShowBalloonTip?
Заставить NotifyIcon отображаться в системном трее
comment
В качестве побочного примечания у меня были некоторые проблемы с NotifyIcons в C # - одна из несоответствий, с которой я столкнулся, была решена путем принуждения свойства Visible к false, а затем true, то есть для обновления панели задач
- person Simon   schedule 07.03.2011
comment
Спасибо, к сожалению, установка невидимого, а затем видимого не помогла.
- person Drew   schedule 07.03.2011
comment
Это какая-то странная просьба. Windows не будет показывать воздушный шар, если пользователь находится вдали от клавиатуры - и будет откладывать его отображение до тех пор, пока он не вернется (чтобы максимально увеличить время, которое ваш баллон проводит с пользователем). Если приложение простаивает, то почти по определению пользователя там нет, и именно в это время вы не хотите показывать всплывающее сообщение (что нормально, поскольку Explorer все равно его не покажет). Но я соглашусь с ChrisF, поставь флаг.
- person Ian Boyd   schedule 07.03.2011
Ответы (2)
Это довольно фундаментальная гонка, это еще один процесс, который заботится о иконке. Проводник Виндоус. Вы не можете сказать, когда он обо всем позаботился. Вызов Thread.Sleep (500) после установки Visible = true должен значительно улучшить шансы.
Обязательно подумайте о том, чтобы отображать значок при запуске вашей программы.
person
Hans Passant
schedule
07.03.2011
К сожалению, мне приходится использовать Thread.Sleep (), чтобы позаботиться об условиях гонки.
- person Drew; 07.03.2011
Почему бы не установить флаг в режиме ожидания, а затем проверить состояние флага после установки значка уведомления как видимого:
// Application has become idle
firstTimeIdle = true;
Потом:
// Show notify icon
notifyIcon.Visible = true;
if (firstTimeIdle && !shownBalloon)
{
notifyIcon.ShowBalloonTip(timeout, title, text, icon);
shownBalloon = true;
}
person
ChrisF
schedule
06.03.2011
Это не совсем моя проблема, я настроил его так, что он показывает только один раз, но если NotifyIcon не виден, воздушный шар не появится. Мне нужен способ заставить NotifyIcon появиться.
- person Drew; 07.03.2011
@ Дрю - Ага. Я предполагал, что возникла проблема с тем, чтобы события происходили в правильном порядке. Установка
notifyIcon.Visible
на true
должна заставить его появиться.
- person ChrisF; 07.03.2011