StreamReader dans un thread empeche la fermeture de l'application
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 :
Code:
1 2 3 4 5
| private void EcouteNamedPipe()
{
mobjThreadTube = new Thread(tubeNotif.Ecoute);
mobjThreadTube.Start();
} |
Fonction qui arrête l'écoute :
Code:
1 2 3 4 5 6 7
| private void ArreteEcouteNamedPipe()
{
if (mobjThreadTube != null)
{
tubeNotif.Stoppe();
}
} |
Classe tubeNotif:
Fonction d'écoute tubeNotif.Ecoute:
Code:
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);
}
} |
Fonction d'arrêt tubeNotif.Stoppe:
Code:
1 2 3 4 5 6 7 8 9
| public void Stoppe()
{
mbEcoute = false;
objFluxLu.Close();
if (mobjPipeClient != null)
{
mobjPipeClient.Close();
}
} |
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.
Si quelqu'un à rencontrer ce type de problème et a trouvé une solution merci de la partager. Je reste ouvert aux suggestions :D