2012-03-28 11 views
0

Ich habe Thread mit while (true), die meine Verbindung mit dem Client pflegen. Inside habe ich wenn mit bool. Wenn ich auf die Schaltfläche klicke, wird "true" gesetzt und die Dateiübertragung wird gestartet (alle Anweisungen sind in if).Ende Thread, der auf Klick wartet

Meine Frage ist, wie ich Verbindung im Thread ohne Weile aufrechterhalten könnte, oder wie ich das "während" ausgehen sollte, wenn mein Client getrennt ist.

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

Ich glaube nicht Ihre 'while' tatsächlich etwas tut, um die Verbindung zu halten. – svick

+0

'während' Thread drücken, um auf Schaltfläche klicken klicken –

+1

Okay, aber das heißt nicht, dass es die Verbindung aufrechterhält. Sie könnten genauso gut auf den Buttonklick in einem Event reagieren. – svick

Antwort

0

Verwenden Sie ManualResetEvent zum Synchronisieren von Threads. Im Hintergrund Thread verwenden Warten Sie und in der Taste klicken Sie auf Antwort verwenden Set() -Methode

0

Verwenden während ist keine sehr gute Idee, da die CPU-Zyklen verschwendet werden Schleifen der Schleife.

Wenn sich die SayHi() - Methode nicht in einem separaten Thread befindet, können Sie die while-Schleife sicher entfernen und die SayHi() -Methode direkt aus dem Klickereignis der Schaltfläche aufrufen.

Wenn die SayHi() - Methode in einem separaten Thread ist, können Sie ein ManualResetEvent- oder ein AutoResetEvent-Ereignis verwenden und ein WaitHandle verwenden, um innerhalb der while-Schleife zu warten. Dies stellt sicher, dass die CPU-Zyklen nicht verschwendet werden, während der Thread keine Aufgabe ausführt.

Siehe den folgenden Link, zum Beispiel Nutzung von Waithandle: What is the basic concept behind WaitHandle?

Verwandte Themen