0

おそらくここでいくつかの論理的な要素が欠けていると確信していますが、表面的には、私がやっていることはうまくいくはずです. 最初に概要を説明するために、vb.net を使用してグリッド ビューをループし、セッション変数に保存している値を取得しています。次に、javascript を使用してページを開き、開いたページのセッション変数を使用して、ページを埋めるデータベースからデータを取得します。オーバーライドされた Render 関数から HTML をスクレイピングし、ファイルに取り込みます。

そのほとんどはうまく機能しますが、問題は、ループで Thread.Sleep を使用すると、すべてのページの合計期間スリープすることです。たとえば、10 ページを開いて 5 秒間スリープすると、スレッドは50 秒間停止してから、window.open を急速に起動します。JavaScript を使用し、setTimeout を 5 秒間一時停止すると、最初は機能しますが、グリッドビュー内の残りのドキュメントで再び急速に機能します。

これが私が現在持っているものです:

Protected Sub ArchiveAll_Click(sender As Object, e As EventArgs) Handles ArchiveAll.Click
    Dim rowcount As Integer = GridView1.Rows.Count
    Dim counter As Integer = 0
    Dim url = "foo.aspx?"
    Dim IDGrab As String = ""
    Dim IDGrab2 As String = ""




    Session("IDHolder") = Now.Year.ToString + Now.Month.ToString + Now.Day.ToString + Now.Hour.ToString + Now.Minute.ToString

    While counter < rowcount
        IDGrab = GridView1.Rows(counter).Cells(1).Text
        IDGrab2 = GridView1.Rows(counter).Cells(2).Text
        Session("FormID") = IDGrab
        Session("UserName") = IDGrab2
        WriteAction()
        counter = counter + 1

    End While


End Sub

Private Sub WriteAction()
    Dim url = "foo.aspx?"
    Response.Write("<script>setTimeout(function(){window.open('" & url & "','')},5000);</script>")
End Sub

つまり、より正確には、ArchiveAll をクリックしてから 5 秒後に、1 つ開いて 5 秒待ってから別のウィンドウを開くのではなく、最大 100 個のウィンドウが開きます。クラッシュシティ。

それで、私はここで何が欠けていますか?それが本当に単純なものなら、私は自分自身を蹴っても大丈夫です。

4

1 に答える 1