我确定我可能在这里遗漏了一些逻辑元素,但从表面上看,我正在做的事情似乎应该奏效。只是先给你一个概述,我使用 vb.net 循环浏览网格视图并提取我存储在会话变量中的值。然后它通过 javascript 打开一个页面,并使用打开页面上的会话变量从填充页面的数据库中提取数据。它从覆盖的 Render 函数中抓取 HTML 并将其拉入文件。
大部分工作都很好,但问题是当我在循环中使用 Thread.Sleep 时,它会在所有页面的总持续时间内休眠 - 例如,如果我打开 10 个页面并且有 5 秒的睡眠,则线程是暂停 50 秒,然后快速启动 window.open。如果我使用 javascript 并且 setTimeout 暂停 5 秒,它会第一次工作,但会再次快速触发 gridview 中的其余文档。
这是我目前拥有的:
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 后五秒钟,它会打开大约 100 个窗口,而不是打开一个,等待五秒钟,然后再打开另一个。崩溃城市。
那么我在这里错过了什么?如果它真的很简单,我什至可以踢自己。