保持 UI 在主线程中的响应,webBrowser_DocumentCompleted在同一行代码上等待
本文关键字:一行 等待 代码 DocumentCompleted 线程 UI webBrowser 响应 保持 | 更新日期: 2023-09-27 18:32:57
我想在webBrowser1_DocumentCompleted事件中等待一段时间。原因是当下一个文档完成时,Web浏览器文档流可以很好地下载。我不想在等待时阻止 UI,也不想解雇即将到来的Document_Completed_Events。
private void FormTimer()
{
webBrowser1.Navigate("http://www.rolex.com/");
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
DownloadCount++;
alarmCounter = 0;
Task abc = new Task(() =>
{
while (alarmCounter < 5)
{
Thread.Yield();
}
});
abc.Start();
Task.WaitAny(abc);
}
void timer_Tick(object sender, EventArgs e)
{
alarmCounter++;
}
问题是刻度在 DocumentCompleteEvent 中停止。请帮助我了解问题以及处理这些情况的好方法。
更新:这种技术的工作原理是,通过分离预期的不需要的事件并去DoEvents((,它还将保持UI响应以及计时器滴答。
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
richTextBox1.Text += "'nDocument Started" + documentCount;
alarmCounter = 0;
timer.Enabled = true;
//Do some work
webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted;
while (alarmCounter < 3)
{
Application.DoEvents();
}
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
richTextBox1.Text += "'nDocument Completed." + documentCount;
}
你用的是Windows.Forms.Timer吗?你应该知道,Windows.Forms.Timer 在与 UI 相同的线程中执行什么。因此,您调用Task.Wait任何阻塞线程并且计时器停止工作。