我在使用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");
关于它为什么一直失败的任何想法?在此先感谢您的帮助。
答案 0 :(得分:1)
我使用SHDocVW.WebBrowserClass时遇到了类似的问题。当我尝试从SHDocVW.WebBrowserClass的实例(来自主线程)访问Document.all时,我得到了一个InvalidCastException,并且我能够通过转换为IHTMLDocument2而不是HTMLDocument来修复它。这花了我很长时间才弄明白,因为转换为HTMLDocument大部分时间都在工作。
SHDocVW.WebBrowserClass Explorer = [instance of IE];
((IHTMLDocument2)Explorer.Document).all // works all the time
((HTMLDocument)Explorer.Document).all // works some times
我希望这有助于某人。
答案 1 :(得分:0)
我不确定这是否解决了问题,但您可以检查当前对象或WebBrowser.InvokeRequired上的InvokeRequired属性,并使用类似MethodInvoker的方法来调用您的函数或帮助函数来访问WebBrowser.Document。 / p>