请检查下面的代码:
Public Class tier1
Dim rnd As New System.Random()
Function build1(ByVal dt As DataTable) As String
Try
For i = 0 To 4
For ix As Integer = 0 To till Step 4
lstrn.Add(rnd.Next(ix, ix + 4))
Next
Dim cntx As Integer = 0
For Each x As Integer In lstrn
If (i = 0) Then
If (article(x).Split(ChrW(10)).Length > 2) Then
If (article(x).Split(ChrW(10))(0).Length > 300) Then
first.Add(article(x).Split(ChrW(10))(0))
cntx = cntx + 1
If (cntx = 25) Then
Exit For
End If
End If
End If
End If
lstrn.Clear()
Next
Dim fi as String = "{"
For dx As Integer = 0 To first.Count - 2
fi = fi & w.spinl(first(dx), "light") & "|"
Next
fi = fi & "}"
Return fi
Catch ex As Exception
End Try
End Function
End Class
现在看我的主叫代码:
Dim w As WaitCallback = New WaitCallback(AddressOf beginscn)
For var As Integer = 1 To NumericUpDown1.Value
Dim param(1) As Object
param(0) = lst
param(1) = var
ThreadPool.QueueUserWorkItem(w, param)
Next
sub
sub beginscn()
Dim scntxt As String = t1.buildtier1(dt)
end sub
现在明白我给的东西和我想要的东西。假设我传递了这样的数据表:
1,abcd,34,5
2,adfg,34,5
3,fhjrt,34,5
4,rtitk,34,5
我想要的是{abcd | adfg | fhjrt | rtitk},这个序列应该是随机的。由于我传递了50-100个值并且在25处退出循环,因此每个输出应该具有{|}格式的25个字符串的不同序列,但它不能像那样工作。每次我得到相同的序列。
任何人都可以解释为什么会这样做以及任何可能解决此问题的方法?
注意:我在排队之前已经尝试过改组数据,但它仍无效。
答案 0 :(得分:0)
随机对象不是线程安全的。您可以通过在每个线程中创建随机对象的单独实例来解决此问题,并使用线程ID生成 种子。
http://msdn.microsoft.com/en-us/library/ms683183%28VS.85%29.aspx