87 votes

NotifyIcon reste dans le Tray même après la fermeture de l'application mais disparaît au passage de la souris

Il y a beaucoup de questions sur SO qui posent le même doute. La solution à ce problème est de définir

notifyIcon.icon = null et en appelant Dispose dans l'événement FormClosing.

Dans mon application, il n'y a pas de formulaire de ce type mais une icône de notification qui est mise à jour sur les événements. Lors de la création, je cache mon formulaire et je fais ShowInTaskbar propriété false . Je ne peux donc pas avoir d'événements "FormClosing" ou "FormClosed".

Si cette application reçoit un événement pour sortir, elle appelle Process.GetCurrentProcess().Kill(); pour sortir.

J'ai ajouté notifyIcon.icon = null ainsi que Dispose before killing, mais l'icône reste dans la barre des tâches jusqu'à ce que je passe la souris dessus.

EDIT : Si je suppose que ce comportement est dû au fait d'appeler GetCurrentProcess().Kill() Est-ce qu'il existe un moyen élégant de quitter l'application en vidant toutes les ressources et en supprimant l'icône de la barre d'état système ?

54voto

Jason Dias Points 91

Vous pouvez soit définir

notifyIcon1.Visible = false;

O

notifyIcon.Icon = null;

dans l'événement de fermeture du formulaire.

21voto

The Muffin Man Points 5858

La seule solution qui a fonctionné pour moi a été d'utiliser l'événement Closed (Fermé) et de masquer et éliminer l'icône.

icon.BalloonTipClosed += (sender, e) => { 
                                            var thisIcon = (NotifyIcon)sender;
                                            thisIcon.Visible = false;
                                            thisIcon.Dispose(); 
                                        };

17voto

Shim-Sao Points 974

Les composants doivent simplement être disposés dans le bon ordre, comme ceci :

NotifyIcon.Icon.Dispose();

NotifyIcon.Dispose();

Ajoutez ceci à la MainWindow événement de clôture.

J'espère que cela vous aidera.

13voto

Pouya Points 184

Utilisez ce code lorsque vous voulez le faire lorsque vous appuyez sur le bouton Quitter ou Fermer :

private void ExitButton_Click(object sender, EventArgs e)
{
    notifyIcon.Dispose();
    Application.Exit(); // or this.Close();
}

Utilisez ce code lorsque vous voulez le faire lorsque le formulaire se ferme :

private void Form1_FormClosing(object sender, EventArgs e)
{
    notifyIcon.Dispose();
    Application.Exit(); // or this.Close();
}

Le code important est le suivant :

notifyIcon.Dispose();

11voto

user1759636 Points 11

Utilice notifyIcon.Visible = False en FormClosing événement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X