保持 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;
    }

保持 UI 在主线程中的响应,webBrowser_DocumentCompleted在同一行代码上等待

你用的是Windows.Forms.Timer吗?你应该知道,Windows.Forms.Timer 在与 UI 相同的线程中执行什么。因此,您调用Task.Wait任何阻塞线程并且计时器停止工作。