2012-03-28 3 views
0

У меня есть нить с while (true), которые поддерживают мое соединение с клиентом. Внутри у меня есть, если с bool. Когда я нажимаю кнопку, он устанавливает «истина», и начинается передача файлов (вся инструкция включена if).Ending Thread, который ждет нажатия

Мой вопрос в том, как я мог поддерживать соединение в потоке, пока не было, или как я должен выйти, «пока», когда мой клиент отключен.

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 для синхронизации потоков. В обратном потоке используйте команду «Подождите» и нажмите кнопку «Ответить». Используйте метод Set()

0

Использование в то время как - не очень хорошая идея, так как циклы CPU теряются, вращая петлю.

Если метод SayHi() не находится в отдельном потоке, вы можете безопасно удалить цикл while и напрямую вызвать метод SayHi() изнутри события нажатия кнопки.

Если метод SayHi() находится в отдельном потоке, вы можете использовать ManualResetEvent или AutoResetEvent и использовать WaitHandle для ожидания внутри цикла while. Это гарантирует, что циклы CPU не будут потрачены впустую, пока нить не выполняет никаких задач.

Смотрите следующую ссылку, например, использование WaitHandle: What is the basic concept behind WaitHandle?

Смежные вопросы