Je cré un objet qui instentie une icone de notification qui reste bien sagement en attente de recevoir un clic pour afficher un menu.
Je veux lancer son activité dans une thread.
cela est tout normal avec ce code,
pour t'expliquer de facon plus simple un thread est comparable a un 2ieme process en mémoire qui s'execute en parallèle.
dans un programme que se passe il quand tu ecris :
Sub Main { ...}
et qu'il arrive a la "}" du main ? le programme se referme
il en va de même pour les thread si tu fait :
private static void DemarrerModuleInterface(){
TacheModuleInterface=new Thread(AmorceModuleInterface);
TacheModuleInterface.Start();
}
private static void AmorceModuleInterface(){
ModuleInterface LeModuleInterface = new ModuleInterface();
}
une fois arrivé a l'accolade rouge le thread a fini son execution detruit ses ressources et se termine donc en l'occurence ici ton icone ect ...
pour cela il faut que tu dise a ton thread de boucler tant que sa tache n'est pas fini :
Private static void AmorceModuleInterface(){
try
{
While(!bTacheFini) //bTacheFini est un paramètre de bouclage ca peut tres bien etre un membre d'une autre calsse, une variable de classe, internal ect ... a toi de voir les condition de bouclage
{
ModuleInterface LeModuleInterface = new ModuleInterface();
Application.DoEvents(); //permet a l'appli de traiter les evenementect .. (tel que l'affichage) cf la doc pour l'explication exacte
Threading.Thread.CurrentThread.Sleep(200); //Dit au thread courrant de s'arreter 200 millisecond (pas besoin qu'il tourne comme un dingue en roue libre) ca laisse du repis au CPU et cie (a toi d'ajuster ce delai)
}
}
catch(ThreadAbortException e) {
//Catch quand on appelle le .Abort du thread a toi de voir comment tu l'arrete
//cette exception peut donc etre "logique" si tu fait un .abort()
}
hum...c'est pas vraiment la solution que je cherche.
En fait j'espairais qu'il existé un truc genre WaitEvent(clicsouris) pour eviter d'avoir à faire une boucle
Tu vois, genre un truc qui interrompt le traitement comme quand tu ouvres un form et où le capteur d'evenement reste en detection
Pasque quand t'ouvres un form le Event il est en attente, et la je voudrais faire la meme chose mais sans form
Quand tu ouvres une Form, il se passe exactement ce que te dis TeBeCo : une boucle infinie qui attend un message (sauf que tu ne le vois pas dans ton code). C'est grosso modo ce que fait l'appel a application.run dans le programme Main.
D'ailleurs si ça te gène te gérer toi même ce thread, tu peux utiliser la méthode suivante :
Créer un projet "application WinForm", et associer ta NotifyIcon à la Form principale : elle sera "vivante" tant que la form principale restera ouverte. Et si tu ne veux pas avoir de Form dans ton projet, il te suffit de faire un "Hide" au démarrage de ton appli (ou par exemple d'utiliser la form principale comme un splash screen, que tu affiche au lancement et que tu cache au bout de quelques seconde -> mais sans la fermer, de sorte que ta notify icon reste visible).
<hr size="2" width="100%" />Working as designed
Vous n’avez pas trouvé la réponse que vous recherchez ?