【问题标题】:How to fix "The requested resource is in use. (Exception from HRESULT: 0x800700AA)"如何修复“请求的资源正在使用中。(来自 HRESULT 的异常:0x800700AA)”
【发布时间】:2011-01-12 12:29:57
【问题描述】:

我该如何解决这个错误?

“请求的资源正在使用中。(来自 HRESULT 的异常:0x800700AA)”。

在使用 C# .NET 中的 WebBrowser 控件导航到不同的网站时会出现此问题。为什么?

【问题讨论】:

  • 您如何使用 WebBrowser?您是通过用户交互还是以编程方式导航?你能发布一些代码来展示导航是如何初始化的吗?
  • 你什么时候得到arror?浏览器本身有消息框吗?
  • DocumentComplete 在页面的最后一次之前每帧引发一次。页面上有框架吗?
  • 有一页有 2 个框架。这是原因吗?我该如何解决?

标签: c# .net webbrowser-control


【解决方案1】:

如果当前正在处理导航操作,或者当前打开了来自控件的任何阻止对话框(包括上下文菜单、Javascript 警报、NTLM 登录对话框等),则认为 WebBrowser 控件“正在使用”。您可以使用WebBrowser.IsBusy 属性来检测这些状态。

如果由于当前导航操作不完整,您可以尝试停止当前导航(如果您确实想在页面未完成加载时停止)或将新导航添加到请求队列并使用计时器等待直到 WebBrowser.IsBusy 返回 false。

如果忙碌状态是由一个或多个打开的阻塞对话框引起的,您可以执行相同的等待技术,并且可能会向用户Messagebox.Show() 发送一条消息,指出由于打开的对话框窗口而导致挂起导航延迟。

【讨论】:

【解决方案2】:

我也有同样的问题。调用 WebBrowser.Stop() 没有帮助,WebBrowser.IsBusy 永远不会成为错误。

事实证明,如果页面创建了任何类型的对话框alert() 弹出窗口、javascript 错误、NTLM 登录弹出窗口等),在对话框出现之前,您无法离开页面关闭。

我的解决方案是首先阻止对话框显示。 Apparently 防止所有这些弹出窗口很简单;刚刚设置

webBrowser.ScriptErrorsSuppressed = true;

【讨论】:

  • 如果您阻止 NTLM 登录弹出窗口...例如,这不会阻止用户通过代理吗?
  • 我确认设置 webBrowser.ScriptErrorsSuppressed = true 不会显示 NTLM 登录提示。在我们的案例中,这意味着我们无法通过代理访问外部网站,因此该解决方案对我们不起作用。
  • 如果在当前打开右键单击上下文菜单时尝试设置.DocumentText,也会发生此错误。您可以通过检查WebBrowser.IsBusy 属性轻松检查此状态。它确实根据控件是否准备好接受新导航(分别)正确返回 False 或 True。
【解决方案3】:
bool go = false;
string SiteContent1 = string.Empty;
string SiteContent2 = string.Empty;
int index = 0;
WebBrowser wb = new  WebBrowser();

    void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {

        try
        {
            if (go)
            {
                SiteContent2 = wb.DocumentText;
                // Code to compare to contents of the webbrowser
                index++;
                go = false;
                steps = 1;
            }

            if (!go)
                {

                    if (index >= TotalSiteCount)
                    {
                        Stop();
                    }
                    else if (steps == 1)
                    {
                        wb.Navigate(UrltocompareList[index].Url1);

                    }
                    else if (steps == 2)
                    {
                        SiteContent1 = wb.DocumentText;
                        wb.Navigate(UrltocompareList[index].Url2);
                        go = true;
                    }
                    steps++;                        
                }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);

        }

    }

UrltocompareList 是要比较的 2 个站点的集合。
TotalSiteCount 是 UrltocompareList 中的项目数。
此表单继承 IOleClientSite 以删除图像、视频等媒体和没有活动的 X 下载,以便在 webbrowser 控件中具有更快的呈现时间。

我使用这种方法而不是 system.net.webclient 来获取网页的 html 然后比较它们。
当它遇到 wb.Navigate 方法时出现此错误。

【讨论】:

    【解决方案4】:

    我在 Windows 10 中使用 watin 运行 specflow 测试时遇到的一个问题是 win10 默认使用 MS Edge,因此我从未打开 IE,并且当 watin 启动时,IE 卡在使用默认设置的提示上。选择选项、关闭浏览器并再次运行测试对我有用。

    只是看的东西

    【讨论】:

      【解决方案5】:

      这很容易解决。 当浏览器在执行操作时提交操作时会发生此错误。 例如,当您在 Web 浏览器中单击鼠标右键时,您正在导航到某个网站。 为了解决这个问题,我做了以下操作:

      //if my webbrowser isn't performing any actions
      if(!myWebBrowser.IsBusy)
      {
         //Navigate
         myWebBrowser.Navigate("http://www.google.com");
      }
      

      【讨论】:

        【解决方案6】:

        第一次尝试

        1- 请检查导航网址(如果检查,请再次检查编译文件夹)

        2- 删除 WebBrowser 控件并添加新控件

        我忘记复制原始文件 App.Path + "\error.html" 并看到这个问题。

        保证方式

        我在 VB6 中修复了这个错误

        添加 WebBrowserControl wb(0)(名称 wb,索引=0)

        以前的导航

        For i = 1 To wb.UBound
        
            Unload wb(i)
        
        Next
        
        Load wb(1)
        
        wb(0).Visible = False
        
        wb(1).Visible = true
        
        wb(1).Navigate URL
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多