Исчезающие значки на панели задач

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

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

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

Какие-нибудь мысли или опыт?

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


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

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

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


person Larry    schedule 24.09.2010    source источник
comment
Вы уверены, что процесс, отображающий значок, все еще выполняется при наведении курсора на значок?   -  person Dirk Vollmar    schedule 24.09.2010


Ответы (4)


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

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

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

person Hans Passant    schedule 24.09.2010

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

Так что по какой-то причине ваш значок в трее, возможно, «вылетает».

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

person Aliostad    schedule 24.09.2010

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

person Julien Roncaglia    schedule 24.09.2010

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

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

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

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

person j-me    schedule 16.01.2017