嗨,请检查此代码
For icnt As Integer = 1 To 100
Me.SetText(icnt)
Dim gd As String = ""
Dim gl As String = ""
Dim cr As String = ""
Dim lr As String = ""
Dim tbs As String = ""
Dim srt As String = ""
Dim fp As String = ""
Dim ky As String = ""
Dim prx As String = ""
Dim rnd As New Random
Dim scrpurl As String = ""
Dim bldstr As New List(Of String)
scrpurl = GlobalVariables.domain(rnd.Next(0, GlobalVariables.googledomain.Count - 1)) & "/search?q="
scrpurl = scrpurl & GlobalVariables.prints(rnd.Next(0, GlobalVariables.footprints.Count - 1))
scrpurl = scrpurl & GlobalVariables.words(rnd.Next(0, GlobalVariables.keywords.Count - 1))
scrpurl = scrpurl & GlobalVariables.gl(rnd.Next(0, GlobalVariables.googlegl.Count - 1))
scrpurl = scrpurl & GlobalVariables.cr(rnd.Next(0, GlobalVariables.googlecr.Count - 1))
scrpurl = scrpurl & GlobalVariables.lr(rnd.Next(0, GlobalVariables.googlelr.Count - 1))
scrpurl = scrpurl & GlobalVariables.tbs(rnd.Next(0, GlobalVariables.googletbs.Count - 1))
scrpurl = scrpurl & GlobalVariables.start(rnd.Next(0, GlobalVariables.googlestart.Count - 1))
MsgBox(scrpurl)
bldstr.Clear()
bldstr.Add(scrpurl)
Dim dr3 As DataRow() = dtse.Select("seurl ='" & scrpurl & "'", "se")
If (dr3.Count = 0) Then
Dim w1 As WaitCallback = New WaitCallback(AddressOf setdata)
ThreadPool.QueueUserWorkItem(w1, bldstr)
End If
Next
有人能告诉我,当我显示消息框时,我看到scrpurl和setdata的不同值会添加正确的行和100个唯一行。
当我不显示它时,setdata会添加100行相同的scrpurl。我知道应该做的事情,以便每个setdata得到不同的scrpurl但我在这里缺少一些东西。有人可以帮帮我吗?
此致
答案 0 :(得分:1)
每次迭代循环时,您都在创建一个新的Random
对象。如果将Dim rnd As New Random
行移到for循环之前,它将正常工作。
这是因为计算机生成的随机数并不是随机的 - 它们只是出现是随机的。它的工作方式是首先确定“种子”值。然后,它使用数学公式,通过输入种子值加上附加序列值,可以获得下一个(看似)随机数。因此,只要种子值相同,它生成的随机数序列将始终相同。 Random
类生成它的种子值的方式是基于创建对象时的当前时间。因此,如果您同时创建一堆Random
个对象,它们将生成完全相同的随机数序列。
因此,在应用程序启动时创建一个Random
对象通常是最佳做法,然后在每个地方重复使用相同的对象,而不是每次需要时都创建一个新对象。