我正在创建一个可以等待计算机连接到我的服务器的程序 这段代码最初在控制台中实现,但我希望它以GUI形式
MsgBox("Server is ready!", MsgBoxStyle.Information, "ChatApp! | Alert")
server = New TcpListener(ipendpoint)
server.Start()
While True
client = server.AcceptTcpClient
Dim c As New Connection
c.stream = client.GetStream
c.streamr = New StreamReader(c.stream)
c.streamw = New StreamWriter(c.stream)
c.hostname = c.streamr.ReadLine
list.Add(c)
FlatListBox1.AddItem(c.hostname)
ListView1.Items.Add(c.hostname & " is connected")
Dim t As New Threading.Thread(AddressOf ListenToConnection)
t.Start(c)
End While
Me.Show()
将其添加到Form_load后,但我的表单不可点击或其他 请在我的表单运行时帮助我在后台运行此代码
修改
我在谷歌的某个地方找到了答案。
' Background work
Task.Factory.StartNew(Function()
' Update UI thread
End Function).ContinueWith(Function(t)
End Function, TaskScheduler.FromCurrentSynchronizationContext())
但我不知道如何将其合并到我的代码
后出错If Me.InvokeRequired Then
Me.BeginInvoke(Sub() TextBox1.Text = "Done")
End If
答案 0 :(得分:3)
您的表单无法点击,因为您正在锁定UI主题。
你有一个永不退出的While..End While
循环。
您需要将其更改为在某个时刻退出(UI将在运行此循环时被锁定),或者如果需要多次运行,则将代码移出UI线程。
有很多选择
我建议查看Tasks and Continuations,因为您将获取读取流并与UI线程交互的结果(I.E.将文本放入列表框中。)