首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

WinForms WebBrowser 等待 DocumentCompleted 完成再繼續執行

     編輯:關於ASP.NET

問題

Navigate 為非同步操作,後續程式碼會立即執行,無法直接等待頁面載入完成。

解決方案:AutoResetEvent 訊號同步

private AutoResetEvent _pageLoaded = new AutoResetEvent(false);

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
    _pageLoaded.Set();  // 發出訊號
}

private void button1_Click(object sender, EventArgs e) {
    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
    webBrowser1.Navigate("https://www.sina.com.cn");
    
    _pageLoaded.Reset();
    // 等待訊號,每 10ms 處理一次訊息迴圈避免 UI 凍結
    while (!_pageLoaded.WaitOne(10, false)) {
        Application.DoEvents();
    }
    
    MessageBox.Show("頁面載入完成");
}

注意事項

  • DocumentCompleted 可能因框架/iframe 觸發多次,實務上需判斷 e.Url == webBrowser1.Url 確認為主文件。
  • 長時間等待建議加入逾時機制,避免永久阻塞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved