-1

こんにちはこのコードを確認してください

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は同じscrpurlの100行を追加します。各setdataが異なるscrpurlを取得するように何かを行う必要があることはわかっていますが、iamはここで何かを見逃しています。誰か助けてくれませんか?

よろしく、

4

1 に答える 1

1

Randomループを繰り返すたびに、新しいオブジェクトを作成します。Dim rnd As New Random行をforループの前まで移動すると、正常に機能します。

これは、コンピューターで生成された乱数が実際にはランダムではなく、単にランダムに見えるためです。それが機能する方法は、最初に「シード」値を決定することです。次に、数式を使用して、シード値と追加のシーケンス値を入力すると、次の(一見)乱数を取得できます。したがって、シード値が同じである場合は常に、それが生成する乱数のシーケンスは常に同じになります。クラスがシード値を生成する方法はRandom、オブジェクトが作成された現在の時刻に基づいてシード値を生成することです。したがって、多数のRandomオブジェクトを同時に作成すると、それらはすべてまったく同じ乱数のシーケンスを生成します。

このため、通常はRandom、アプリケーションの起動時に1つのオブジェクトを作成し、必要になるたびに新しいオブジェクトを作成するのではなく、どこでも同じオブジェクトを再利用することをお勧めします。

于 2013-01-09T11:17:14.687 に答える