好的,这就是交易 - 我正在WebBrowser
从服务运行 Windows 窗体控件。我知道这是一个禁忌,但它似乎工作正常。
我遇到的唯一问题是尝试等待浏览器的页面加载。在正常的应用程序中,我会做类似的事情
while (browser.readystate != complete)
Application.DoEvents()
显然,这不适用于服务。
我试过这个作为替代方案:
public class WebCrawler
{
private class ExposedActiveXWebBrowser : System.Windows.Forms.WebBrowser
{
public SHDocVw.WebBrowser UnderlyingWebBrowser
{
get
{
return ActiveXInstance as SHDocVw.WebBrowser;
}
}
}
ExposedActiveXWebBrowser worker;
public WebBrowserReadyState ReadyState
{
get
{
return worker.ReadyState;
}
}
public HtmlDocument Document
{
get
{
return worker.Document;
}
}
public WebCrawler()
{
worker = new ExposedActiveXWebBrowser();
}
public void Navigate(string urlString)
{
worker.Navigate(urlString);
while (worker.UnderlyingWebBrowser.ReadyState != tagREADYSTATE.READYSTATE_COMPLETE)
Thread.Sleep(0);
}
}
但是,该 Navigate 方法不起作用。ReadyState 永远不会从 LOADING 改变。
我想知道的是——Windows 窗体 WebBrowsers 似乎本质上是异步的,这是否意味着 ActiveX 控件已经在其自己的线程上执行?
我可以通过适当的接口访问底层的activex控件,等待它完成吗?