多线程线程运行一个函数VB.net

时间:2016-03-31 13:00:09

标签: vb.net

我有一个奇怪的问题。

我的checkedlistbox中有3个项目。我检查所有项目并单击我的按钮。该按钮应创建相同数量的线程(作为已检查的项目编号),并将检查项目的索引提供给函数。该功能在控制台中发出了检查项目。

Public Class Form1
    Private ThreadList As New List(Of Threading.Thread)

    Private Sub MeineFunktion(ByVal username As String)
        Threading.Thread.Sleep(2000)
        Console.WriteLine(username)
        'Debug.Print(username)
    End Sub

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim indexChecked As Integer


        For Each indexChecked In CheckedListBox1.CheckedIndices



            Dim t As Threading.Thread = New Threading.Thread(Sub() MeineFunktion(indexChecked.ToString))
            ThreadList.Add(t)
            t.Start()


        Next

    End Sub
End Class

问题是,控制台总是发出

  

1,1,2

而不是

  

0,1,2

为什么第一项始终被忽略?

到目前为止我尝试了什么

将byval用户名更改为INTEGER,并像这样嘲笑这个值

Dim t As Threading.Thread = New Threading.Thread(Sub() MeineFunktion(indexChecked))

仍然遇到同样的问题。 要么它与我的线程有关,要么与控制台写入功能有关(我也试过调试打印)。

我无法确定造成问题的原因

1 个答案:

答案 0 :(得分:0)

每个线程都需要一些时间来创建并开始运行。在线程可以使用之前,您似乎正在更改用户名。尝试在每个线程启动后添加一个小延迟:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim indexChecked As Integer
    For Each indexChecked In CheckedListBox1.CheckedIndices
        Dim t As Threading.Thread = New Threading.Thread(Sub() MeineFunktion(indexChecked.ToString))
        ThreadList.Add(t)
        t.Start()
        Do
            Threading.Thread.Sleep(10)
        Loop Until t.IsAlive
    Next
End Sub