我写了这样一个程序,用webbrowser加载一个网页,然后定时运行网页中的javascript脚本,局部刷新。
我想在刷新一完成就调用另外一个函数,来读取网页中的数据。用了一个webBrowser1.StatusTextChanged这个事件
当webBrowser1.StatusText=="完成"时,base.Invoke一个读取数据的函数来读数
由于网页更新的速度非常快,程序中间最好不间断的刷新然后读取。
理想是这样的,但是程序写好的时候,我发现读取出来总是那次刷新之前的网页数据,也就是说每次定时函数起来以后,先读了网页的数据,然后网页才刷新的。我不知道这是为什么。
以下是我写的部分代码,希望各位大哥指点一下迷津:
private void refresh()
{
HtmlDocument document;
if (webBrowser1.DocumentTitle.StartsWith("www.idcsds.com"))
{
document = webBrowser1.Document.Window.Frames[0].Document;
document = document.Window.Frames[2].Document;
document.InvokeScript("reload");
}
}
refresh是刷新函数,有定时器定时刷新。调用这个函数来刷新。
然后我想的是,刷新的时候webBrowser1.StatusText就会改变,那么我又写了
private delegate void aa_d();
void webBrowser1_StatusTextChanged(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
richTextBox1.Text += start.ToString() + " " + dt.ToLongTimeString() + ":" + dt.Millisecond + " " + webBrowser1.StatusText + "\n";
toolStripStatusLabel1.Text = webBrowser1.StatusText;
if (webBrowser1.StatusText=="完成")
{
dt = DateTime.Now;
richTextBox1.Text += start.ToString() + " " + dt.ToLongTimeString() + ":" + dt.Millisecond + " 开始读取数据...." + "\n";
base.Invoke(new aa_d(getDate));
}
}
其中getDate是一个读取网页中内容的函数,在这里省略了。
这段代码看起来应该是先刷新,再通过webBrowser1_StatusTextChanged来调用读取数据的函数,但是实际的执行效果是先读取的数据,才document.InvokeScript("reload");的,也就是仿佛是先读完了数据,程序才开始调用reload这个函数,然后才开始刷新的,不知道是不是InvokeScript这个东西有执行上的延时?我能不能获得这个InvokeScript什么时候开始调用的,或者已经调用了的状态呢?
谢谢