.NET中的WebBrowser和Threading问题

时间:2015-06-23 10:48:17

标签: c# html multithreading automation webbrowser-control

我目前正在从使用JavaScript加载特定 span 的URL列表中读取HTML源代码,其中包含我需要提取的动态超链接。一切正常,除了两个小错误,但可以在调试过程中处理:

  1. 到达$content = "<p>123</p> <p>456</p> <p>789</p>" 事件时,有时$content = apply_filters( 'the_content', get_the_content() ); $content = str_replace( ']]>', ']]&gt;', $content ); 为空

  2. 调用DocumentCompleted时,程序有时会挂起很长一段时间。

    Document.Body

1 个答案:

答案 0 :(得分:1)

以下链接可能有助于提供解决手头问题的一些信息,因为看起来Application.DoEvents不是一个很好的用法,关于它及其替代品有很多讨论:

Use of Application.DoEvents()

Alternative to Application.DoEvents()

Do Events Evil

我的理解是Document.Body你发现你是空的,DoEvents可以发挥作用。

关于Join(),它的作用是阻塞直到点线程返回,我不知道你为什么使用STA作为线程属性,这是访问COM之类的东西所必需的,只能在STA模式下运行。您可能希望使用Async-Await系统检查以下相同的链接,这在使UI线程免费方面要好得多,并且会使您的UI界面响应更快:

is there an Application.DoEvents() for WebBrowser?

理想情况下,现在使用线程已经过时,最好使用Task API,因为它们在并行化方面做得更好。