2016-05-30 32 views
-1

我有一個等待UDP消息的程序,while循環在等待消息時做些什麼

有沒有辦法在等待UDP消息時做些什麼?

因此,程序做了一些事情,但只要它收到一條消息並執行其他操作?

感謝

+0

你的問題的答案是:是的,這是可能的 –

+0

你知道一個好方法怎麼樣? – George

+0

如果你想做其他事情,直到你收到消息,那麼你不想等待。你想得到通知(通過一個事件)。啓動等待消息的偵聽器線程,然後通過消息器發佈。 –

回答

0
while (true) 
     { 
      counter += 1; 
      Console.WriteLine("Waiting for connection..."); 
      clientSocket = serverSocket.AcceptTcpClient(); 
      Console.WriteLine(" >> " + "Client No:" + Convert.ToString(counter) + " started!"); 
      handleClinet client = new handleClinet(); 
      client.startClient(clientSocket, Convert.ToString(counter)); 
     } 

參考:http://csharp.net-informations.com/communications/csharp-multi-threaded-server-socket.htm

UPDATE:,如果你想你的主線程是免費的,並創建另一個線程來等待連接閱讀這篇文章:http://www.codeproject.com/Articles/463947/Working-with-Sockets-in-Csharp

String theMessageToReceive = Encoding.Unicode.GetString(bytes, 0, bytesRec); 
    while (senderSock.Available > 0) 
    { 
     bytesRec = senderSock.Receive(bytes); 
     theMessageToReceive += Encoding.Unicode.GetString(bytes, 0, bytesRec); 
    // Do something 
    } 
+0

你能解釋一下嗎? – George

+0

如果你調試程序,'while'會在第三行開始和停止(等待連接),那麼當服務器等待更多時,將創建一個新線程與此客戶端通信('handleClient')。 –

+0

好吧,但我不想等待更多的消息,我只是想創建一個while循環,當他們沒有收到消息時做其他事情 – George

0

首先,多個while循環不是多線程。 C#是一種通過代碼從上到下工作的語言。 二:

//create new worker 
public System.ComponentModel.BackgroundWorker worker; 
// Start new thread 
private void StartBackgroundWorker (...) {...} 
//what should the worker do 
private void worker_DoWork (...) {...} 
//if the progress has changed while working 
private void worker_ProgressChanged (...) {...} 
//thread is finished 
private void worker_RunWorkerCompleted (...) {...} 

這些都是需要的所有方法(也許有點多)該任務。 但我認爲你應該在學習C#的時候低一點。