Я уверен, что, вероятно, у меня, вероятно, отсутствует какой-то логический элемент, но на первый взгляд кажется, что я работаю. Чтобы сначала дать вам обзор, я использую vb.net для циклического просмотра сетки и вытягивания значений, которые храню в переменных сеанса. Затем он открывает страницу через javascript и использует переменные сеанса на открытой странице, чтобы извлекать данные из базы данных, заполняющей страницу. Он сбрасывает HTML из переопределенной функции Render и вставляет ее в файл.Проблемы со сном и setTimeout
Большинство из них хорошо работает, но проблема в том, что когда я использую 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 окон, а не открывать один, ждет пять секунд, и открытие другой. Город аварии.
Так что же мне здесь не хватает? Я даже нормально пинаю себя, если это действительно просто.
Возможно ли иметь тайм-аут в качестве переменной, которую я просто добавляю 5000 с каждым проходом через петлю? Я просто не уверен, могу ли я эффективно использовать такую функцию, всегда открывая одну и ту же страницу, и количество раз, когда она открывается, является динамичной. – Endyo
HUH !? он не открывает одну и ту же страницу каждый раз. Он снимает его с массива! Вы бы создали массив, лучше, чем добавление 5000 тегов скрипта на страницу. Плюс, как долго вы будете сидеть там. 5000 * 5 секунд = 25 000 секунд = 416,17 мин = 6,94 часа. Плюс, если вы их не закрываете, вы получите проблемы с памятью. :) – epascarello
Нет, я имел в виду, что каждый раз открываю ту же страницу. Он открывает страницу формы, и данные заполняются из базы данных. Это будет долгий процесс, но среднее количество страниц, которое он откроет (каждые две недели), составит около ста. Это в основном процедура автоматизации для чего-то, что намного проще сделать вручную ... – Endyo