2011-03-06 1 views
0

J'ai un NotifyIcon qui apparaît dans la barre d'état système et je veux montrer un conseil bulle la première fois que l'application est inactive (comme suggéré ici: C# execute code after application.run()) mais l'événement Idle arrive avant le L'icône apparaît dans la barre d'état système, provoquant l'apparition du ballon. Comment puis-je forcer l'affichage de NotifyIcon avant que j'appelle ShowBalloonTip?Force NotifyIcon à apparaître dans la barre d'état système

+0

En note, j'ai eu quelques problèmes avec NotifyIcons en C# - une des "incohérences" que j'ai rencontrées a été résolue en forçant la propriété Visible à false puis vrai à "rafraîchir" la barre d'état – Simon

+0

Merci, malheureusement à invisible puis visible n'a pas aidé. – Drew

+0

C'est une sorte de demande étrange. Windows ne montrera pas un ballon si l'utilisateur est loin du clavier - et retardera le montrer jusqu'à ce qu'ils reviennent ("afin de maximiser la quantité de temps de face que votre ballon obtient avec l'utilisateur"). Si l'application est inactive, alors presque par définition l'utilisateur n'est pas là, ce qui est exactement le temps où vous ne voulez pas montrer un ballon (ce qui est normal car Explorer ne l'affichera pas de toute façon). Mais je suis d'accord avec ChrisF, mettre un drapeau. –

Répondre

1

C'est une course assez fondamentale, c'est un autre processus qui prend soin de l'icône. Windows Explorer. Vous ne pouvez pas dire quand il a pris soin de choses. Appeler Thread.Sleep (500) après avoir défini Visible = true devrait améliorer considérablement les chances. Pensez à afficher l'icône lorsque votre programme démarre.

+0

C'est malheureux, je dois utiliser Thread.Sleep() pour prendre soin des conditions de course. – Drew

0

Pourquoi pas défini un drapeau au ralenti, puis vérifier l'état du drapeau après avoir défini l'icône Notify Visible:

// Application has become idle 
firstTimeIdle = true; 

Puis:

// Show notify icon 
notifyIcon.Visible = true; 
if (firstTimeIdle && !shownBalloon) 
{ 
    notifyIcon.ShowBalloonTip(timeout, title, text, icon); 
    shownBalloon = true; 
} 
+0

Ce n'est pas exactement mon problème, je l'ai mis en place donc il ne montre qu'une seule fois le ballon, mais si le NotifyIcon n'est pas visible, le ballon n'apparaîtra pas. J'ai besoin d'un moyen de forcer le NotifyIcon à apparaître. – Drew

+0

@Drew - Ah. Je supposais qu'il y avait juste un problème pour que les événements se déroulent dans le bon ordre. La définition de 'notifyIcon.Visible' à' true' devrait le faire apparaître. – ChrisF

Questions connexes