2010-03-01 72 views
4

我有一点麻烦与Windows服务WebBrowser对象。它试图在用户名和密码到网站的值来加载,但一直未能和投掷以下错误:Windows服务WebBrowser对象无效转换异常错误

System.InvalidCastException: Specified cast is not valid. at System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation() at System.Windows.Forms.WebBrowser.get_Document() at MyWindowsService.MyDataProcessor.login()

,我使用,使这个调用的代码是:

MyWebBrowser.Document.All["Login"].SetAttribute("Value", username); 
      MyWebBrowser.Document.All["Password"].SetAttribute("Value", password); 
      MyWebBrowser.Document.All["submit"].InvokeMember("Click"); 

任何想法,为什么它一直失败?先谢谢您的帮助。

+1

所以,我想我已经找到了问题所在。 WebBrowser对象中存在一个错误,该错误阻止DocumentCompleted在不可见的情况下触发,这是Windows Service的一个重点。 (这里有一个链接:http://support.microsoft.com/kb/259935) 我如何去纠正呢?我很想继续使用WebBrowser对象,因此我不必重写所有内容,但不知道如何使其在Windows服务中可见。谢谢。 – 2010-03-24 17:15:22

回答

0

我不确定这是否解决了问题,但可以检查当前对象或WebBrowser.InvokeRequired的InvokeRequired属性,并使用类似MethodInvoker的方法调用您的函数或辅助函数来访问WebBrowser.Document。

http://www.megasolutions.net/cSharp/(WebBrowser_Document-==-null)-throws-InvalidCastException-43126.aspx

+0

林不知道它山姆看到的Axl:的答案,但调用,事情似乎是答案。我有同样的问题,发现这个:http://stackoverflow.com/questions/315938/webbrowser-document-cast-not-valid/318538#318538。这解决了我的问题=) – Ted 2010-11-05 01:22:27

1

我使用SHDocVW.WebBrowserClass有类似的问题。我有一个InvalidCastException当我试图从SHDocVW.WebBrowserClass实例访问的document.all(主线程),我能够通过强制转换的IHTMLDocument2而不是HTMLDocument的解决它。这让我花了很长时间才发现,因为大部分时间都投射到HTMLDocument。

SHDocVW.WebBrowserClass Explorer = [instance of IE]; 
((IHTMLDocument2)Explorer.Document).all // works all the time 
((HTMLDocument)Explorer.Document).all // works some times 

我希望这可以帮助别人。