VB.net表单无响应

时间:2016-03-15 09:04:03

标签: .net vb.net multithreading chat

我正在创建一个可以等待计算机连接到我的服务器的程序 这段代码最初在控制台中实现,但我希望它以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())

但我不知道如何将其合并到我的代码

error 添加此

后出错
If Me.InvokeRequired Then
Me.BeginInvoke(Sub() TextBox1.Text = "Done")
End If

1 个答案:

答案 0 :(得分:3)

您的表单无法点击,因为您正在锁定UI主题。

你有一个永不退出的While..End While循环。

您需要将其更改为在某个时刻退出(UI将在运行此循环时被锁定),或者如果需要多次运行,则将代码移出UI线程。

有很多选择

  • 后台工作者
  • 计时器
  • 一个帖子,
  • 或任务(T)

我建议查看Tasks and Continuations,因为您将获取读取流并与UI线程交互的结果(I.E.将文本放入列表框中。)