vb.net中的线程测试

Rem*_*igo 0 vb.net multithreading

我正在尝试学习多线程,我坚持这个样本

Imports System.Threading

Public Class Form1

   Dim myThread As System.Threading.Thread = New Thread(AddressOf Me.AddItems)


   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      myThread.Start()
   End Sub

   Public Sub AddItems()
      Dim i As Int32
      Dim n As Int32 = 1
      Dim s As String = ""

      For i = 0 To 100
         s = n.ToString
         ListBox1.Items.Add(s)
         n *= 2
         Thread.CurrentThread.Sleep(100)
      Next
   End Sub

End Class
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"跨线程操作无效:控制'ListBox1'从其创建的线程以外的线程访问"

小智 5

ListBox1.Items.Add(s) 是问题.

您无法从非UI线程更新UI. ListBox1由...创建,属于主UI线程.

您应该使用Control.Invoke来执行UI更新.

使用类似的东西:

Private Sub MyMethodOnANonUIThread()

        Dim s As String = "Hello, World!"
        Me.Invoke(New MethodInvoker(Sub() UpdateTheControlOnUIThread(s)))
  End Sub

  Private Sub UpdateTheControlOnUIThread(ByVal updateValue As String)

    ListBox1.Items.Add(updateValue)

  End Sub
Run Code Online (Sandbox Code Playgroud)