0

我正在使用 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);
    }
}

泄漏: CLR 简介

当我输入这个时,我想知道为什么这些功能?我有 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");
4

0 回答 0