簡體   English   中英

在等待同一行代碼時,在主線程webBrowser_DocumentCompleted中保持UI響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM