0

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

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

如果我立即尝试,我总是会遇到 WebBrowser 对象永远挂起或抛出 Null Cast 异常的糟糕问题。

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

4

3 回答 3

1

为什么不再次导航到 URL?

   webBrowser1.Navigate(webBrowser1.Url);

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

于 2013-01-29T23:28:29.833 回答
0

在所需时间刷新时我遇到了类似的问题。WebBrowser正如您所发现的,试图让它按需刷新是没有希望的;HTTP 响应和 HTML 呈现都是不确定的。

我的建议是附加到DocumentCompleted的事件,WebBrowser在后台尽早调用所需的网页并向用户显示一些东西来分散他们的注意力,然后WebBrowserDocumentCompleted触发后显示完成。

于 2013-01-29T23:28:01.193 回答
0

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

wb.Refresh();
while ((wb.ReadyState != WebBrowserReadyState.Complete)) {
    Application.DoEvents();
}
//Refresh is now complete

ReadyState应该只在WebBrowserReadyState.Complete所有 Ajax 和内容完成加载后进行。

于 2013-01-30T15:56:36.207 回答