2012-03-28 3 views
0

J'ai un thread avec while (true) qui maintient ma connexion avec le client. A l'intérieur j'ai si avec bool. Quand je clique sur le bouton, je mets "vrai" et le transfert de fichier est lancé (toutes les instructions sont dans si).Thread de fin qui attend un clic

Ma question est, comment je pourrais maintenir la connexion dans le fil sans tout, ou comment je devrais sortir que "quand" lorsque mon client est déconnecté.

public void SayHi() 
     { 
      try 
      { 
       while (true)//for maintain connection 
       { 

        if(form1.transfer) 
        { 
         NetworkStream networkStream = clientSocket.GetStream(); 


         CardNumber++; 
         form1.SendQuestion(clientSocket, CardNumber, Convert.ToInt32(clNo)); 

         form1.transfer = false; 
         Thread AnswerThread = new Thread(WaitForAnswer); 
         AnswerThread.IsBackground = true; 
         AnswerThread.Start(); 
        } 
       } 

      } 
+1

Je ne pense pas que votre 'while' ne fait quoi que ce soit pour maintenir la connexion. – svick

+0

'while' appuyez sur le fil pour attendre le bouton cliquez sur –

+1

Ok, mais cela ne signifie pas qu'il maintient la connexion. Vous pourriez tout aussi bien réagir sur le bouton cliquer dans un événement. – svick

Répondre

0

Utilisez ManualResetEvent pour synchroniser les threads. Dans backgroud thread utiliser Wait et dans le bouton click répondre utiliser Set() méthode

0

L'utilisation de alors que n'est pas une très bonne idée car les cycles du processeur sont gaspillés à tourner la boucle.

Si la méthode SayHi() n'est pas dans un thread séparé, vous pouvez supprimer la boucle while en toute sécurité et appeler directement la méthode SayHi() depuis l'événement click button.

Si la méthode SayHi() se trouve dans un thread séparé, vous pouvez utiliser un ManualResetEvent ou un AutoResetEvent et utiliser WaitHandle pour attendre dans la boucle while. Cela garantit que les cycles du processeur ne sont pas gaspillés pendant que le thread n'effectue aucune tâche.

Voir le lien suivant par exemple l'utilisation de WaitHandle: What is the basic concept behind WaitHandle?

Questions connexes