2011-11-21 94 views
1

我有一個C#WPF應用程序與Web瀏覽器控件(System.Windows.Controls.WebBrowser)稱爲WB。它應該顯示一個本地html文件,並從中解析出一些信息。NullReferenceException與System.Windows.Controls.WebBrowser WPF

我得到了一個N​​ullReferenceException因爲它說,身體是在最後一行空(IHTMLElementCollection數據= hDoc.body.children爲IHTMLElementCollection)用下面的代碼:

wB.Navigate(new Uri(file, UriKind.Absolute));     
HTMLDocument hDoc = (HTMLDocumentClass)wB.Document; 
IHTMLElementCollection data = hDoc.body.children as IHTMLElementCollection; 

如果我做

wB.Navigate(new Uri(file, UriKind.Absolute));     
HTMLDocument hDoc = (HTMLDocumentClass)wB.Document; 
System.Windows.MessageBox.Show("Loc:" + hDoc.url); 
IHTMLElementCollection data = hDoc.body.children as IHTMLElementCollection; 

一切工作正常。爲什麼身體在第一個例子中顯示爲空,但對第二個例子罰款?

EDIT1 的方法被標記爲[STAThread] ...所以我想併發不會是一個問題......

回答

3

您應該使用

wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); 

所以,你可以確信該文件已加載:

private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    WebBrowser wb = sender as WebBrowser; 
    HTMLDocument hDoc = (HTMLDocumentClass)wB.Document; 
    IHTMLElementCollection data = hDoc.body.children as IHTMLElementCollection; 
} 
+0

謝謝!這解決了它。 – Eugene

4

這是因爲Navigate()方法是異步 - 在您確認第二例MessageBox只是足夠的時間來完成它,所以它的工作原理 - 不是可靠的。

相反,您應該訂閱DocumentCompleted事件並在回調中完成數據收集。

相關問題