[英]Keep the UI responsive in main thread, webBrowser_DocumentCompleted while waiting on the same line of code
我想在webBrowser1_DocumentCompleted事件中等一段時間。 原因是當下一個文檔完成時,Webbrowser文檔流可以很好地下載。 我不想在等待時阻止用戶界面,我不希望上傳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++;
}
問題是,當它在DocumentCompletedEvent中時,tick會停止.Kindly幫助我理解問題以及處理這些情況的好方法。
更新:此技術通過分離預期的不需要的事件並轉到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.WaitAny你阻止線程,你的計時器停止工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.