2014-03-26 94 views
1

我不明白爲什麼我會收到Specified cast is not valid錯誤。它發生在HtmlElement變量newElement上。正在通過 System.Threading.Timer回調函數moreInfo()指定的演員表無效WebBroswer

public void moreInfo() 
    { 
     HtmlElement newElement = webBrowser.Document.GetElementById("order_billing_name"); 
     newElement.InnerText = nameBox.ToString(); 

     newElement = webBrowser.Document.GetElementById("order_email"); 
     newElement.InnerText = emailBox.ToString(); 

     newElement = webBrowser.Document.GetElementById("order_tel"); 
     newElement.InnerText = telephoneBox.ToString(); 

     newElement = webBrowser.Document.GetElementById("order_billing_address"); 
     newElement.InnerText = addressBox.ToString(); 

     newElement = webBrowser.Document.GetElementById("order_billing_zip"); 
     newElement.InnerText = zipBox.ToString(); 

     newElement = webBrowser.Document.GetElementById("order_billing_city"); 
     newElement.InnerText = cityBox.ToString(); 

     newElement = webBrowser.Document.GetElementById("order_billing_state"); 
     newElement.SetAttribute("value", stateBox.ToString()); 

     newElement = webBrowser.Document.GetElementById("order_billing_country"); 
     newElement.SetAttribute("value", countryBox.ToString()); 


    } 
+0

什麼是'nameBox'? –

+0

這是我的Windows窗體應用程序上的文本框。 –

回答

0

我敢打賭,你有一個問題,因爲你試圖從非UI線程訪問UI元素。

你可以用System.Windows.Forms.Timer代替System.Threading.Timer,它會在主線程中觸發事件。

或者,你可以通過調用Invoke嘗試訪問在主線程的UI元素:

this.Invoke(new Action(() => newElement.InnerText = nameBox.ToString())); 
+0

我找到了原因。即使它存在於webBrowser所在的HTML中,newElement也是null。這是什麼意思? –

+0

Html在這裏:https://www.supremenewyork.com/checkout < - 查看源碼 –

+0

如果您直接從主線程暫時運行該方法,而不是在定時器中運行該方法,它會工作嗎? –