【问题标题】:Windows Service Webbrowser object invalid cast exception errorWindows 服务 Webbrowser 对象无效转换异常错误
【发布时间】:2011-09-17 06:16:59
【问题描述】:

我在使用 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");

关于它为什么一直失败的任何想法?提前感谢您的帮助。

【问题讨论】:

  • 所以我想我已经找到了问题所在。 WebBrowser 对象中存在一个错误,该错误会阻止 DocumentCompleted 在不可见时触发,这就是 Windows 服务的全部意义所在。 (这里有一个链接:support.microsoft.com/kb/259935)我该如何纠正这个问题?我很想继续使用 WebBrowser 对象,因此我不必重写所有内容,但不知道如何使其在 Windows 服务中可见。谢谢。

标签: c# browser .net


【解决方案1】:

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

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

【讨论】:

  • 我不确定 Sam 是否看到了 Axl:s 的答案,但 Invoke 似乎是答案。我刚刚遇到了同样的问题,发现了这个:stackoverflow.com/questions/315938/…。这解决了我的问题 =)
【解决方案2】:

我在使用 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

我希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多