2012-03-28 15 views
0

クライアントとの接続を維持するwhile(真)スレッドがあります。私は内側にブールと一緒にいます。ボタンをクリックすると「true」に設定され、ファイル転送が開始されます(すべての命令はifにあります)。クリック待ちの終了スレッド

私の質問は、どのようにしてスレッドを使用せずに接続を維持できるか、またはクライアントが切断されたときにどうすれば "中断"するかです。

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

私はあなた 'while'が実際に接続を維持するために何もしないとは思いません。 – svick

+0

'while'スレッドを押してボタンをクリックするのを待ちます。 –

+1

これは接続を維持するという意味ではありません。あなたは、イベントのボタンをクリックするだけで反応することができます。 – svick

答えて

0

スレッドを同期させるためにManualResetEventを使用してください。バックグラウンドスレッドでは、Wait and Inボタンを使用してSet()メソッドを使用してください。

0

を使用していますが、はCPUサイクルがループを浪費するので非常に良いアイデアではありません。

SayHi()メソッドが別のスレッドにない場合は、whileループを安全に削除し、button clickイベント内からSayHi()メソッドを直接呼び出すことができます。

SayHi()メソッドが別のスレッドにある場合は、ManualResetEventまたはAutoResetEventを使用し、WaitHandleを使用してwhileループ内で待機することができます。これにより、スレッドが処理を実行していない間にCPUサイクルが無駄にならないようにします。

はWaitHandleの使用例については、以下のリンクを参照してください: What is the basic concept behind WaitHandle?

関連する問題