我正在使用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()?
doParse():
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;
}
的MoveNext():
// Store data, navigate to next page.
webBrowser1.DocumentCompleted += this.scrapeData;
webBrowser1.Navigate("about:blank");