我在Web应用程序中使用WebBrowser Control。在DocumentCompleted事件上我想在我的字符串中使用DocumentText。我的文档完成事件就像是跟随。
void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string str = IEBrowser.DocumentText;
}
现在问题是我想要的DocumentText我没有在DocumentCompleted Event中得到它。我认为有些javascript可以在DocumentCompleted事件之后执行。所以我改变了我的代码。
void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Thread th = new Thread(new ThreadStart(startthread));
th.Start();
}
public void startthread()
{
//To Wait untill WebBrowser run that javascript
Thread.Sleep(5000);
string str = IEBrowser.DocumentText;
}
现在使用此代码,我得到“指定的强制转换无效”。 如何等待运行WebBrowser的线程?
答案 0 :(得分:1)
虽然我不认为这是一个很好的方法,但其中一种方法是:不要在DocumentComplete中处理它。做这样的事情:
做你需要做的事......然后在某一点上,浏览器需要导航到一个网址,然后(你可能需要检查语法,只需输入我的标题):
IEBrowser.Navigate(url);
bool flag = true;
int times = 0;
while (flag)
{
Sleep(500);
Application.DoEvent();
if (IEBrowser.ReadyState == WebBrowserReadyState.Complete)
{
times ++;
}
else
{
times = 0;
}
if (times >= 10)
{
flag = false;
}
}
string str = IEBrowser.DocumentText;
同样,这只是一个让你尝试的工作。取决于你的目的,这可以改善很多。但我使用类似于此的程序进行许多刮削工作,并且工作正常。取决于页面,documentComplete可能会被多次触发。
祝你好运答案 1 :(得分:0)
我不太确定你在这里做了什么,但我可以保证你开始这个线程不是正确的解决方案。
试试这个,因为根据我的经验,应该多次调用IEBrowser_DocumentCompleted ......
void IEBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (IEBrowser.ReadyState = WebBrowserReadyState.Complete)
{
//Do my stuff
}
}
不确定这是否适合你,但我过去已经成功了......