2010-04-07 42 views
1

我想在我的代码中编程创建WebBrowser控件,然后阅读页面内容。
我觉得我和设计师做同样的事情,但控制动态创建不起作用(DocumentText返回空字符串)WebBrowser动态创建不起作用

我在做什么错了?

编辑2:

WebBrowser browser = new WebBrowser { Name = "myBrowser"}; 
browser.DocumentCompleted += browser_DocumentCompleted; 
browser.Navigate("www.google.com"); 
while (pageLoaded == false) 
{ 
    Thread.Sleep(500);  // pageLoaded is local field 
    Application.DoEvents(); // didn't wotk without this... 
} 
Console.WriteLine(browser.DocumentText); 

事件处理程序代码:@Axarydax建议(工作)

主块码后代码变化

void browser_DocumentCompleted (object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    pageLoaded = true; 
} 
+0

现在你忘了让浏览器知道DocumentCompleted事件 - > add browser.DocumentCompleted + = new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted)到Main方法 – Axarydax 2010-04-07 09:33:33

+0

我明白了 - 只是忘了粘贴这行代码。 但我终于加入了Application.DoEvents();命令在while循环中。谢谢你指导我! – Maciej 2010-04-07 12:41:59

回答

2

导航方法是异步的,所以你应该等待NavigationComplete事件被解雇。 虽然,如果您想要页面的HTML,请使用System.Net.WebClient。

+0

我已经根据你的建议更改了代码 - 仍然无效 - 任何想法如何解决它? – Maciej 2010-04-07 08:07:14

+0

衷心thanx,对于这篇文章,它帮助了我很多! – FosterZ 2010-10-12 13:09:43

1

Navigate方法异步工作,因此页面在后台加载,并且在访问DocumentText属性时没有文本。

尝试在DocumentCompleted事件中添加处理程序,并将您的Console.WriteLine(browser.DocumentText)呼叫移动到那里。

+0

我需要在主程序线程中“等待”来处理读取内容。我已经将编辑#1添加到我的示例尝试存档。任何想法如何管理? – Maciej 2010-04-07 08:11:53

+0

如果您只需要该页面的HTML源代码,请遵循Axarydax的建议。 – 2010-04-07 08:30:50

1

您需要为事件激发消息。用缺少消息分派的while循环(例如Application.DoEvents)阻塞消息泵将不起作用。

相关问题