我正在使用 webbrowser 对象遇到某种泄漏;我仍在到处寻找答案——我在这个论坛上也看到了一些类似的问题,但我不知道如何在我的案例中应用这些发现。
在页面加载 DocumentCompleted 动作并解析页面上的 HTML 后,
void PageScrollTimerTick(object sender, EventArgs e)
{
String pageSrc = webBrowser1.Document.Body.InnerHtml;
// Check if we need to stop scrolling..
if (m_iLastFramePageLength == pageSrc.Length)
{
m_iLastFramePageLength = 0;
m_scrollTimer.Tick -= PageScrollTimerTick
m_scrollTimer.Enabled = false;
parsePage();
nextPage();
}
else
{
m_iLastFramePageLength = pageSrc.Length;
webBrowser1.Document.Window.ScrollTo(0, webBrowser1.Document.Body.ScrollRectangle.Height);
}
}
泄漏:
当我输入这个时,我想知道为什么这些功能?我有 6 个不同的功能可以完成非常相似的任务。我认为这些有问题,因为它们是从可能使用不同线程的 TIMER 执行的。我接近了吗?我该如何解决这个问题。也许在 Web 浏览器控件上调用 Invoke()?
解析():
List<String> doSomeExtractions()
{
List<String> retVal = new List<String>();
foreach (HtmlElement div in webBrowser1.Document.GetElementsByTagName("div"))
{
String szClassName = div.GetAttribute("classname");
switch (szClassName)
{
case "someDivClass":
{
if (div.InnerHtml.Contains("<b>"))
{
retVal.Add(div.InnerHtml);
}
break;
}
default:
{
break;
}
}
}
return retVal;
}
移动下一个():
// Store data, navigate to next page.
webBrowser1.DocumentCompleted += this.scrapeData;
webBrowser1.Navigate("about:blank");