我有一个网页,我正在撕毁我正在编写的程序中使用的元素。将特定元素加载到网页需要一些时间,所以我想我会使用WebBrowser.Refresh()
来完成获取最新代码。
不幸的是,如果你之后想要做任何事情,那么这样做会引起很大的麻烦,因为它不会触发DocumentCompleted
事件(在任何人要求之前,它甚至在MSDN上明确表示)。
所以我需要一种方法来让程序在刷新页面后不做任何操作。问题是我不知道如何做到这一点并且能够获得更新的WebBrowser.Document
。如果我使用Thread.Sleep,整个应用程序会在它休眠时挂起并且没有任何更新。
如果我立即尝试,我会不可避免地得到WebBrowser对象永远挂起或者抛出Null Cast异常的糟糕蹩脚问题。
有没有其他人遇到过这类问题(或类似问题)并找到解决方案?
答案 0 :(得分:1)
为什么不再次导航到该网址?
webBrowser1.Navigate(webBrowser1.Url);
这将触发您需要的事件处理程序。
答案 1 :(得分:0)
我有一个similar problem让WebBrowser
在所需的时间刷新。正如您所发现的那样,尝试按需刷新它是没有希望的; 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
。