Navigate 為非同步操作,後續程式碼會立即執行,無法直接等待頁面載入完成。
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 確認為主文件。