【问题标题】:Delphi webbrowser get all links in tthread objectDelphi webbrowser获取tthread对象中的所有链接
【发布时间】:2015-04-17 01:39:35
【问题描述】:

我在 tthread 对象中运行我的代码时遇到问题。它应该通过 twebbrowser 中的所有链接,然后如果 url 包含“http://www.ebay.com/itm/”,则将其复制到备忘录中。该代码在 mainform 中完美运行,但在 tthread 对象中不起作用。

我的代码:

begin
  count := 0;
   loop := 0;
    repeat
    link := Webbrowser1.OleObject.Document.Links.Item(loop).href;
     if AnsiContainsStr(link, 'http://www.ebay.com/itm/') then
    begin
     Form1.Memo1.Lines.Add(link);
    end;

  end;

     loop := loop + 1;
    count := count + 1;
  until count = Webbrowser1.OleObject.Document.links.Length;
end;

我遇到的错误

模块 mshtml.dll 中地址 xxxxxx 的访问冲突

感谢您的阅读和所有回复。

【问题讨论】:

标签: delphi browser tthread


【解决方案1】:

您的控件仍然与 GUI 线程有关联。所以你不能从工作线程访问它。

您只需对线程设计稍作调整即可完成这项工作。处理页面的源以提取 GUI 线程中的所有链接。这必须在那里完成,你别无选择。但是然后让工作线程对链接进行后续处理。我假设真正的应用程序对链接的作用比将它们放在备忘录中更多!

您应该有一个简单的生产者/消费者设计。 GUI 线程产生一个链接列表。工作线程消耗它们。线程安全队列将允许您在线程之间同步任务。您可能会受益于使用 OTL 等更高级别的库而不是编码原始线程。

【讨论】:

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