I have a server chat use socket and multithreading but i can't show data of client to my textbox, I only see that data when i use "Msgbox", I only take a warning about cross-thread...blah...blah but i think it's not my problem so i dismiss it by code:
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
My form have a textbox is txtContent, this is my code, I think i have to use Delegate, SynchronizationContext or RaiseEvent but I tried and not success :(
Please help me!
Option Explicit On
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Net.Sockets
Imports System.Net
Imports System.Threading
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary
Public Class Server
Dim clientsList As New Hashtable
Dim serverSocket As New TcpListener(IPAddress.Parse("127.0.0.1"), 8888)
Dim clientSocket As TcpClient
Private Sub Server_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
serverSocket.Start()
msg("Chat Server Started ....")
Dim t As New Thread(AddressOf Main)
t.Start()
End Sub
Sub Main()
While True
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
clientsList(dataFromClient) = clientSocket
msg(dataFromClient + " Joined chat room ")
Dim client As New HandlerClient
client.StartClient(clientSocket)
End While
clientSocket.Close()
serverSocket.Stop()
msg("exit")
End Sub
Private Sub msg(ByVal text As String)
txtContent.Text = txtContent.Text + text + Environment.NewLine
End Sub
End Class
Public Class HandlerClient
Public clientSocket As New TcpClient
Public Sub StartClient(ByVal clSocket As TcpClient)
Me.clientSocket = clSocket
Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
ctThread.Start()
End Sub
Private Sub doChat()
Dim requestCount As Integer
Dim bytesFrom(10024) As Byte
Dim dataFromClientOfDoChat As String
Dim rCount As String
While True
Try
Dim networkStream As NetworkStream = clientSocket.GetStream()
networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
dataFromClientOfDoChat = System.Text.Encoding.ASCII.GetString(bytesFrom)
dataFromClientOfDoChat = dataFromClientOfDoChat.Substring(0, dataFromClientOfDoChat.IndexOf("$"))
' Server.txtListClient.Text = ("From client - " +" : " + dataFromClientOfDoChat) 'This line not work
Msgbox("From client - " + " : " + dataFromClientOfDoChat) 'But this line work
MsgBox("From client - " + "clNo " + " : " + dataFromClientOfDoChat)
rCount = Convert.ToString(requestCount)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End While
End Sub
End Class
I attached my source which i based on, maybe useful to test