Bonjour à tous,
Voila je rencontre un problème dans un programme en C#.
J'ai un Thread qui tourne qui attend des messages depuis un NamedPipe, en client donc.
Seulement si j'essaye de fermer mon application le thread continue de tourner jusqu'au prochain message avant de quitter.
Code :
Fonction qui lance l'écoute :
Fonction qui arrête l'écoute :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private void EcouteNamedPipe() { mobjThreadTube = new Thread(tubeNotif.Ecoute); mobjThreadTube.Start(); }
Classe tubeNotif:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 private void ArreteEcouteNamedPipe() { if (mobjThreadTube != null) { tubeNotif.Stoppe(); } }
Fonction d'écoute tubeNotif.Ecoute:
Fonction d'arrêt tubeNotif.Stoppe:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public void Ecoute() { mobjPipeClient = new NamedPipeClientStream(".", msNomTube, PipeDirection.InOut); mobjPipeClient.Connect(2000); StreamWriter objFluxEcrit = new StreamWriter(mobjPipeClient); objFluxEcrit.AutoFlush = true; objFluxEcrit.WriteLine(mnIdConnectTube); // permet l'identification du client pour le serveur objFluxLu = new StreamReader(mobjPipeClient); mbEcoute = true; while (mbEcoute == true) // boucle jusqu'à un appel à tubeNotif.Stoppe { string output = objFluxLu.ReadLine(); // bloque ici tant qu'il n'y a pas de nouveau message MessageBox.Show(output); } }
Seulement voila dans la fonction tubeNotif.Ecoute l'execution se bloque sur la ligne string output = objFluxLu.ReadLine(); tant qu'il n'y a pas de nouveau message. donc si j'appelle la fonction d'arrêt tubeNotif.Stoppe le thread reste actif.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public void Stoppe() { mbEcoute = false; objFluxLu.Close(); if (mobjPipeClient != null) { mobjPipeClient.Close(); } }
Si quelqu'un à rencontrer ce type de problème et a trouvé une solution merci de la partager. Je reste ouvert aux suggestions![]()
Partager