> Web浏览器自动化:确保在单独的线程上完成导航
在单独的线程中使用WebBrowser控件自动浏览Web浏览通常会通过检测文档负载完成提出挑战。 事件可能不会在线程结束之前发射,以防止访问已加载的文档。
>
解决方案:利用sta threadDocumentCompleted
>
解决此问题的关键是使用单线程公寓(STA)线程和消息循环。 STA线程为ActiveX组件(例如WebBrowser)提供了必要的环境。 这是实施此操作的方法:
这个
方法创建一个sta线程。
启动消息泵,对于WebBrowser Control的事件处理至关重要。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private void StartBrowserThread(Uri url) {
var thread = new Thread(() => {
var webBrowser = new WebBrowser();
webBrowser.DocumentCompleted += WebBrowser_DocumentCompleted;
webBrowser.Navigate(url);
Application.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
private void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
var webBrowser = (WebBrowser)sender;
if (webBrowser.Url == e.Url) {
Console.WriteLine($ "Navigated to: {e.Url}" );
Application.ExitThread();
}
}
|
登录后复制
事件处理程序确认导航完成,记录URL,然后使用
终止线程,以确保清洁资源管理。StartBrowserThread
以上是如何在单独的线程中可靠地处理WebBrowser控制导航完成?的详细内容。更多信息请关注PHP中文网其他相关文章!