おそらくここでいくつかの論理的な要素が欠けていると確信していますが、表面的には、私がやっていることはうまくいくはずです. 最初に概要を説明するために、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 個のウィンドウが開きます。クラッシュシティ。
それで、私はここで何が欠けていますか?それが本当に単純なものなら、私は自分自身を蹴っても大丈夫です。