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。 –