从WebBrowser派生类获取WebBrowser.DocumentText

时间:2017-08-01 15:22:37

标签: c# .net webbrowser-control derived-class

我试图从System.Windows.Forms.WebBrowser编写一个派生类来为它添加一个HtmlAgilityPack.HtmlDocument并自动添加/添加一些WebBrowser做/不做的事情。 我已经解决了大部分问题,但我希望自动化我将html加载到HtmlAgilityPack.HtmlDocument中的方式。 WebBrowser并没有真正揭示一种知道方式是否已经完成加载并且我在这个派生类上使用了DocumentCompleted事件并且已经放置了一个System.Timers.Timer来引发一个事件,这样它就会重置计时器直到最后一个DocumentCompleted。 我试图公开一个事件处理程序,但我想自动执行,我不想从外面调用xwebBrowser.HAPDocument.LoadHtml(xwebBrowser.DocumentText)...

花了几个小时(仅仅是因为我的错,我还没试过)在做这个课程,它的扩展等等...我试图运行它,然后编译但当它试图获取DocumentText时它是null ... 现在我知道DocumentText在它完成工作之前将为null。 有没有办法实现这个或我只是浪费时间? 提前谢谢!

对不起,如果有人不理解我,我的英语很差。

public class XWebBrowser : WebBrowser
{    
    public HtmlDocument HAPDocument = new HtmlDocument();
    private Timer loadTimeout = new Timer() { Interval = 1200, AutoReset = false };
    public bool IsLoading { get; private set; }

    public int LoadTimeout
    {   
        get { return (int)loadTimeout.Interval; }
        set { loadTimeout.Interval = value; }
    }

    public XWebBrowser()
    {   
        DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Document_Completed);
        loadTimeout.Elapsed += loadTimeout_Elapsed;
    }

    private void Document_Completed(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        Console.WriteLine("completed");
        IsLoading = true;
        loadTimeout.Reset(); //Just a method what does if (loadTimeout.Enabled) loadTimeout.Stop(); loadTimeout.Start();
    }

    private void loadTimeout_Elapsed(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine("loaded");
        IsLoading = false;
        loadTimeout.Stop();
        Console.WriteLine(DocumentText); //The problem comes here, a System.Windows.Forms InvalidCastException (DocumentText equals null so cant be casted to string i suppose)
    }
}

0 个答案:

没有答案
相关问题