2012-03-28 83 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 2012-03-28 10:37:25

+0

',而'推線程等待按鈕點擊 – 2012-03-28 10:48:11

+1

好吧,但這並不意味着它維持連接。您也可以對事件中的按鈕點擊做出反應。 – svick 2012-03-28 11:09:20

回答

0

使用ManualResetEvent來同步線程。在背景線程中使用Wait和In按鈕單擊答案使用Set()方法

0

使用不是一個好主意,因爲CPU循環浪費了循環。

如果SayHi()方法不在單獨的線程中,則可以安全地刪除while循環,並從按鈕單擊事件中直接調用SayHi()方法。

如果SayHi()方法位於單獨的線程中,則可以使用ManualResetEvent或AutoResetEvent,並使用WaitHandle在while循環中等待。這確保了在線程沒有執行任何任務時CPU週期不會被浪費。

請參見以下鏈接的WaitHandle的用法示例: What is the basic concept behind WaitHandle?