編輯:這個問題的一部分已經在別處回答,但我覺得這個線程提供一些更多的信息,可能是方便知道C#HTMLElementCollection引發InvalidCastException
標題幾乎說明了一切,但這裏是多一些信息:
我有一個函數,它使用全局WebbBowser對象的HTMLdocument來搜索特定對象(即文本框)。當找到該對象時,它將被賦予一個值。
功能如下:
public static void Set_Elements_Input(string element_name, string value)
{
HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");
foreach (HtmlElement he in hec)
{
if (he.GetAttribute("name") == element_name)
{
he.SetAttribute("value", value);
}
}
}
因爲情節的我不能在我的編程環境進行調試。所以我必須運行生成的.exe來查看它是否有效。它不。
我的程序崩潰,crashreport指出崩潰是由InvalidcastException引起的。
隨着MessageBox.Show()方法的幫助下,我好不容易纔找到的地步,一切順利香蕉:
MessageBox.Show("I got here!");
HtmlElementCollection hec = _wb.Document.GetElementsByTagName("input");
MessageBox.Show("I didn't get here!");
這令我奇怪,因爲我看不出這是怎麼丟一個InvalidCastException。我知道foreach與演員合作,但我的程序似乎永遠不會達到該代碼。那個,HTMLElementCollection是一個HTMLElements的集合,所以我沒有看到如何處理InvalidCastException。也許當收集是空的,但我認爲這是一個不同的例外。
比我想,也許這是因爲我正在使用線程,我必須使用調用。但http://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelementcollection.aspx表示HtmlElementCollections是線程安全的(或者與它無關?)。那個,而且這個函數是靜態的,所以我甚至不確定我是否可以調用。
這麼長的故事,發生了什麼?我該如何解決它?
這可能有所幫助: http:// stackoverflow。com/questions/12386071/threading-and-webbrowser-control – Kai 2013-04-24 07:12:52
這似乎是同一個問題的確。我會嘗試並報告。 – Jordy 2013-04-24 07:16:10