VB.net 表单无响应
VB.net Form Not Responding
我正在创建一个可以等待计算机连接到我的服务器的程序
此代码最初是在控制台中实现的,但我希望以 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 之后,但我的表单不可点击,否则
当我的表格是 运行
时,请帮助我在后台运行此代码
编辑
我在 google 的某处找到了答案。
' 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
您的表单不可点击,因为您正在锁定 UI 线程。
你有一个永远不会退出的 While..End While
循环。
您需要将其更改为在某个时候退出(UI 将在 运行 循环时被锁定),或者将代码移出 UI 线程,如果它需要 运行 不止一次。
有多种选择
- 后台工作者
- 一个计时器
- 一个线程,
- 或(T 的)任务
我建议查看 Tasks and Continuations,因为您将获取读取流并与 UI 线程交互的结果(即将文本放入列表框。)
我正在创建一个可以等待计算机连接到我的服务器的程序 此代码最初是在控制台中实现的,但我希望以 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 之后,但我的表单不可点击,否则 当我的表格是 运行
时,请帮助我在后台运行此代码编辑
我在 google 的某处找到了答案。
' 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
您的表单不可点击,因为您正在锁定 UI 线程。
你有一个永远不会退出的 While..End While
循环。
您需要将其更改为在某个时候退出(UI 将在 运行 循环时被锁定),或者将代码移出 UI 线程,如果它需要 运行 不止一次。
有多种选择
- 后台工作者
- 一个计时器
- 一个线程,
- 或(T 的)任务
我建议查看 Tasks and Continuations,因为您将获取读取流并与 UI 线程交互的结果(即将文本放入列表框。)