Navigate()
不是阻塞调用(参见MSDN 文档中的第一行),但它确实更新了 UI,因此需要从 UI 线程调用。
你有几个选择:
Navigate()
通过调用将来自 BackgroundWorker 的调用编组到UIInvoke
线程
- 不要使用 BackgroundWorker - 只需
Navigate()
从您的 UI 调用(例如按钮单击事件处理程序)并监听 WebBrowser DocumentCompleted 事件。
有关 1 的示例 - 请参阅https://stackoverflow.com/a/1862639/517244
这是 2 的代码示例:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void _goButton_Click(object sender, EventArgs e)
{
_webBrowser.Navigate("http://google.com/");
// Non-blocking call - method will return immediately
// and page will load in background
}
private void _webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// Navigation complete, we can now process the document
string html = _webBrowser.Document.Body.InnerHtml;
// If the processing is time-consuming, then you could spin
// off a BackgroundWorker here
}
}