Исчезающие значки в системном трее - PullRequest
2 голосов
/ 24 сентября 2010

Я создаю приложение в системном трее в Visual Studio 2010, используя C #.

При запуске приложения я создаю тему и значок в системном трее. Значок отображается, однако при наведении курсора мыши на значок он исчезает (приложение все еще работает), и даже если я нажимаю кнопку, чтобы отобразить все скрытые значки, он не отображается.

Однако, если я не пытаюсь навести на него курсор мыши, он остается в системном трее.

Есть мысли или опыт?

Заранее спасибо


Спасибо за ответы, ребята.

Э-э, кое-что я сделал, чтобы исправить это раньше, хотя для тех, кто, возможно, любопытен.

Первоначально я не использовал форму Windows, и именно тогда возникла проблема. Однако, когда я установил свое приложение как форму окна, и просто скрыл форму, а не отображал ее на панели задач, это сработало.

Ответы [ 4 ]

3 голосов
/ 24 сентября 2010

Вставьте этот код в класс вашей формы:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        notifyIcon1.Visible = false;
        base.OnFormClosing(e);
    }

Это гарантирует, что значок исчезнет, ​​не задержавшись в трее.Теперь установите точку останова для этого кода и выясните, почему ваша форма закрывается.Скопируйте и вставьте трассировку стека в свой вопрос, если не можете понять, почему.

1 голос
/ 24 сентября 2010

Если вы создаете объект значка и позволяете ему выйти из области видимости без ссылки на него, следующая сборка мусора вызовет его деструктор, и это произойдет.

1 голос
/ 24 сентября 2010

Это означает, что иконка в трее была удалена.Это обычно происходит после того, как процесс завершается, но трей остается там - это ошибка Windows.

Так что по какой-то причине иконка в трей может "зависнуть".

Не видя ваш код, он будетневозможно комментировать дальше.

0 голосов
/ 16 января 2017

Когда Windows Explorer перезапускается, Windows очищает все значки в области уведомлений и отправляет широковещательное сообщение TaskbarCreated . Один должен использовать это сообщение, чтобы снова добавить значок уведомления.

Вы можете использовать следующий код для прослушивания события:

UINT WM_TaskBarCreated = ::RegisterWindowMessage(L"TaskbarCreated");

и используйте windowproc или MessageHandler, чтобы добавить значок обратно в область уведомлений.

...