關閉接收中的UdpClient
在撰寫Udp相關的應用時,呼叫Receive方法時會等候到接收了資料為止;因為這個特性,通常會使用另外一個Thread來處理Udp的動作,例如說一個接聽廣播封包的thread,專門對特定的port number等候廣播訊息,而接聽到指令之後進行特定動作,程式碼可能長的像是下面這樣
當執行到_client.Receive之後,就會在這一行指令等候資料接收,那麼在這個狀況之下,如果應用程式必須要關閉的話,要怎麼處理呢?Thread.Abort() ? 這個時候如果呼叫Thread的Abort方法還是無法停止Thread的運作 Orz
那麼應該怎麼做呢?搜尋了一下之後發現方法也是出乎意料的簡單,直接呼叫UdpClient的Close方法就可以了,那麼就可以用類似下面的方式來停止等候接收
其中要特別留意Exception的處理,因為呼叫了Close,在接受資料這邊是會出現錯誤狀況的;給大家參考看看了 :)
Private Sub WaitForCommand() Do If _bolStop Then Exit Do Try btyRecv = _client.Receive(_anyEndpoint) If btyRecv.Length > 0 Then If ByteToStr(btyRecv) = "command" Then ''do something End If End If Catch ex As Exception ''錯誤處理 End Try Threading.Thread.Sleep(100) Loop End Sub
當執行到_client.Receive之後,就會在這一行指令等候資料接收,那麼在這個狀況之下,如果應用程式必須要關閉的話,要怎麼處理呢?Thread.Abort() ? 這個時候如果呼叫Thread的Abort方法還是無法停止Thread的運作 Orz
那麼應該怎麼做呢?搜尋了一下之後發現方法也是出乎意料的簡單,直接呼叫UdpClient的Close方法就可以了,那麼就可以用類似下面的方式來停止等候接收
Public Sub [Stop]() _bolStop = True Try If _client IsNot Nothing Then _client.Close() End If Catch ex As Exception ''錯誤處理 End Try End Sub
其中要特別留意Exception的處理,因為呼叫了Close,在接受資料這邊是會出現錯誤狀況的;給大家參考看看了 :)
留言