【发布时间】:2014-11-16 17:07:29
【问题描述】:
我正在使用Timer 来确定使用 AJAX 加载的页面是否准备就绪,并且仅在准备就绪时才从函数返回(包括 ajax 内容的页面加载已加载)。我正在尝试类似下面的代码,但我发现Application.DoEvents() 只处理挂起的 Windows 消息循环项,因此它运行到无限循环,因为Applicadion.DoEvents() 不会引发任何WebBrowser 的事件(但只有 Windows 一个作为我提到过)所以ReadyState 不能更新也永远不会改变。
我的问题是:有什么方法可以强制 WebBrowser's 事件 Application.DoEvents() 吗?
static bool done = false;
int[] foo()
{
int[] data;
timer1.Interval = 1000;
timer1.Tick += new EventHandler(delegate(object o, EventArgs ea)
{
if (browser.ReadyState == WebBrowserReadyState.Complete)
{
timer1.Stop();
data = extract_data();
done = true;
}
});
timer1.Start();
while(!done) /* return from function only if timer1 isn't running anymore */
{
Application.DoEvents();
Thread.Sleep(1000);
}
return data;
}
我知道Application.DoEvents()“问题”,但我找不到任何其他方法来做到这一点。一种不同的解决方法也非常受欢迎。
【问题讨论】:
标签: c# .net events timer browser