【问题标题】:Firing WebBrowser.DocumentCompleted event whilst in a loop在循环中触发 WebBrowser.DocumentCompleted 事件
【发布时间】:2015-10-03 04:29:24
【问题描述】:

我正在开发一个简单的应用程序,它需要遍历一个 URL 列表,这些 URL 被传递给每个循环中的 WebBrowsers Navigate 函数。我希望在每次调用 Navigate 函数后看到 DocumentCompleted 事件触发,但它似乎只在整个表单完成加载后触发 - 并且循环已经完成。

我想我在这里遗漏了一些基本的东西,但一些帮助和建议会很棒!

谢谢!

这是我正在尝试的代码示例...

这个 foreach 循环在我正在使用的 WinForms 页面的 Form Load 事件中运行...

            int id = 0;
        foreach (DataRow row in quals.Rows)
        {
            URN = row["LAIM_REF"].ToString();

            string URN_formated = URN.Replace("/", "_");
            string URL = "http://URL_I_AM_GOING_TOO/";
            string FullURL = URL + URN_formated;

            wbrBrowser.ScriptErrorsSuppressed = true;
            wbrBrowser.Refresh();
            wbrBrowser.Navigate(FullURL);

            id += 1;

            label1.Text = id.ToString();

        }

在循环到达该行的点:

wbrBrowser.Navigate(FullURL);

我希望这次活动:

        private void wbrBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
...
}

因此能够针对循环中返回的每个 URL 运行进程。

谢谢!

【问题讨论】:

  • 你能提供一些代码来展示你到目前为止所做的尝试吗?它是 WPF 还是 WinForm 应用程序?如果可用,一些诊断跟踪也会很有用
  • 我刚刚在原始问题中添加了一些代码 sn-ps,希望它可以帮助解决我的问题。

标签: c# webbrowser-control navigateurl


【解决方案1】:

我用过:

while (wbrBackground.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }

在导航功能之后,它现在可以按预期工作了。

【讨论】:

  • 这很糟糕:1)它使用busy waiting loop 徒劳地烧毁你的CPU内核; 2) 它使用DoEvents,即almost always an evil
  • 感谢 Noseratio - 您对如何以其他方式实现此目标有任何建议吗?
  • 我愿意,例如this,我想我以前发过;或this.
  • 这两个看起来都很棒!我特别关注使用 example.com 测试站点的那个 - 但我无法让它在 winform 中工作......??这是专门为作为控制台应用程序编写的吗?
  • 宾果游戏!正是我所追求的!对此感激不尽!正是我正在寻找的,并且能够使用这个框架来实现我所追求的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2022-06-10
  • 2021-03-21
  • 2012-09-25
相关资源
最近更新 更多