我有一个奇怪的问题。
我的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))
仍然遇到同样的问题。 要么它与我的线程有关,要么与控制台写入功能有关(我也试过调试打印)。
我无法确定造成问题的原因
答案 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