【问题标题】:.NET webbrowser - documentcompleted not responding correctly.NET webbrowser - documentcompleted 没有正确响应
【发布时间】:2011-11-18 02:15:10
【问题描述】:

我正在这样做:

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (webBrowser1.DocumentText.IndexOf("Negative Orders") != -1)
    {
        webBrowser1.Navigate(@"http://............somepage");

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

        MessageBox.Show("finished loading");
    }
}

发生了一些非常奇怪的事情。成功进入IF STATEMENT;但是,一旦它执行webBrowser.Navigate,它就会进入while,然后它会简单地返回。 它根本不做消息框。

这是怎么回事?

【问题讨论】:

  • 在调试器中查看DocumentText
  • @slaks shabsi 我改写了谢谢你
  • 如果将 MessageBox 放在 while 循环之前会发生什么?
  • @herrow:你知道 webbrowser 控件是 .NET 的一部分,而不是 C# 的一部分,对吧?
  • @evan 如果之前工作正常

标签: c# html internet-explorer browser


【解决方案1】:

听起来好像发生了异常。尝试将整个事情放在 try catch 中,并在发生异常时中断

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    try
    {
        if (webBrowser1.DocumentText.IndexOf("Negative Orders") != -1)
        {
            webBrowser1.Navigate(@"http://............somepage");

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

            MessageBox.Show("finished loading");
        }
    }
    catch (Exception x)
    {
        System.Diagnostics.Debugger.Break();
    }
}

【讨论】:

  • 试过了,没有例外,就是什么都没有发生
  • 那么我需要更多的上下文。您是否在 winforms 应用程序的主 GUI 线程上使用 WebBrowser?
【解决方案2】:

我相信您的消息框没有被调用,因为您的代码仍在调用堆栈深处的 Application.DoEvents(); 部分中。大概是在等你离开webBrowser1_DocumentCompleted方法去调用下一个DocumentCompleted处理程序,最后把ReadyState设置为Complete

我完全不建议使用Application.DoEvents();,但特别是不要在webBrowser1_DocumentCompleted 中使用。

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 2016-07-19
    • 1970-01-01
    • 2011-05-20
    • 2016-10-13
    • 2018-09-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    相关资源
    最近更新 更多