Boa tarde caros colegas, estou tentando desenvolver um chat para a rede interna aqui e segui a "risca" esse tutorial.
https://docs.microsoft.com/en-us/previous-versions/aa478452(v=msdn.10)#creating-the-chat-server
Porém na hora em que o servidor recebe a mensagem ele me da o seguinte erro.
Additional information: Operação entre threads inválida: controle 'lstStatus' acessado de um thread que não é aquele no qual foi criado.
Private Sub UpdateStatus(ByVal t As String)
lstStatus.Items.Add(t)
lstStatus.SetSelected(lstStatus.Items.Count - 1, True)
End Sub
Pesquisei e vi que teria que usar um Invoke para poder manipular o evento de outro objeto mas pelo que eu entendi está correto. Será que alguem consegue me ajudar? Faz dias que to tentando fazer isso funcionar kkkkk.
O Invoke to fazendo da seguinte maneira
Private Sub DoListen()
Try
mobjListener = New TcpListener(IP, 5000)
mobjListener.Start()
Do
Dim x As New Client(mobjListener.AcceptTcpClient)
AddHandler x.Connected, AddressOf OnConnected
AddHandler x.Disconnected, AddressOf OnDisconnected
AddHandler x.LineReceived, AddressOf OnLineReceived
mcolClients.Add(x.ID, x)
Dim params() As Object = {"New Connection"}
Me.Invoke(New StatusInvoker(AddressOf Me.UpdateStatus), params)
Return
Loop Until False
Catch
End Try
End Sub
E no Load do form ta assim:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
mobjThread = New Threading.Thread(AddressOf DoListen)
mobjThread.Start()
UpdateStatus("Listener started")
End Sub
O que está errado? tenho declarado a nivel de classe
Public Delegate Sub StatusInvoker(ByVal t As String)
Private mcolClients As New Hashtable()
Private mobjListener As TcpListener
Dim IP As IPAddress = IPAddress.Parse("127.0.0.1")
Dim mobjThread As Thread
Agradeço encarecidamente o apoio.