0
在我當前的項目中,我發送和接收來自serversocket/clientsocket(TCP)的textmessages,就像聊天(我的項目是用VB.NET編寫的)。只要我將發送的字節轉換爲字符串並將它們呈現在msgbox()中,就可以工作。 此代碼處理該部分:將數據從socket通信傳遞到用戶界面
Try
client = ar.AsyncState
client.EndReceive(ar)
client.BeginReceive(bytes2, 0, bytes2.Length, SocketFlags.None, New AsyncCallback(AddressOf OnRecieve), client)
Try
Dim message As String = System.Text.ASCIIEncoding.ASCII.GetString(bytes2)
MsgBox(message)
Array.Clear(bytes2, bytes2.GetLowerBound(0), bytes2.Length)
Catch ex As Exception
MsgBox("Error writing received message")
End Try
Catch ex As Exception
MsgBox("Error receiving message from server")
End Try
到目前爲止好。但是,當我嘗試將「MsgBox(消息)」更改爲label1.text =消息時,出現錯誤:「寫入收到的消息時出錯」。那麼,我的問題就是爲什麼會發生這種情況,我可以採取什麼措施來糾正它,以便我的套接字能夠接收可添加到文本框和UI中其他內容的信息?
在此先感謝您的幫助,您可以提供
確定感謝這麼多Idle_Mind,我會試試這個明天再回來給你結果。我感到寬慰的是,修復可能相當簡單,所以我可以回到我的項目中,這個項目已經停止了很多。 –
儘管我並不知道代碼的功能如何,但這似乎仍在工作:)非常感謝您的幫助 –
您不應該從其他線程更新UI元素。這樣做會導致NewMessage()通過使用BeginInvoke()在UI主線程中運行。當查詢的控件(「Me」= Form)在另一個線程上創建時,InvokeRequired行將返回true。 BeginInvoke()行在與創建控件相同的線程中運行委託。這會導致對第二次運行返回false的同一方法進行遞歸調用,並且您可以放入else塊來安全地更新UI。 –