在我打电话给WebBrowser.Refresh后,我应该等多久才能做某事?

时间:2013-01-29 23:16:56

标签: c# .net-4.0 webbrowser-control

我有一个网页,我正在撕毁我正在编写的程序中使用的元素。将特定元素加载到网页需要一些时间,所以我想我会使用WebBrowser.Refresh()来完成获取最新代码。 不幸的是,如果你之后想要做任何事情,那么这样做会引起很大的麻烦,因为它不会触发DocumentCompleted事件(在任何人要求之前,它甚至在MSDN上明确表示)。

所以我需要一种方法来让程序在刷新页面后不做任何操作。问题是我不知道如何做到这一点并且能够获得更新的WebBrowser.Document。如果我使用Thread.Sleep,整个应用程序会在它休眠时挂起并且没有任何更新。

如果我立即尝试,我会不可避免地得到WebBrowser对象永远挂起或者抛出Null Cast异常的糟糕蹩脚问题。

有没有其他人遇到过这类问题(或类似问题)并找到解决方案?

3 个答案:

答案 0 :(得分:1)

为什么不再次导航到该网址?

   webBrowser1.Navigate(webBrowser1.Url);

这将触发您需要的事件处理程序。

答案 1 :(得分:0)

我有一个similar problemWebBrowser在所需的时间刷新。正如您所发现的那样,尝试按需刷新它是没有希望的; HTTP响应和HTML呈现都是不确定的。

我的建议是附加到WebBrowser的{​​{3}}事件,在后台尽早调用所需的网页并向用户显示分散注意力的内容,然后显示已完成的{{1} } WebBrowser之后。

答案 2 :(得分:0)

如果你想懒惰而不使用后台线程:

wb.Refresh();
while ((wb.ReadyState != WebBrowserReadyState.Complete)) {
    Application.DoEvents();
}
//Refresh is now complete
所有Ajax和内容都已完成加载后,

ReadyState应该只有WebBrowserReadyState.Complete