0

我有以下代码,我在 TWebBrowser 项目中使用它来处理对网页的快速调用。现在,虽然这可能不是处理此问题的“最佳”方式,但 crmBrowser 已登录,理论上应该能够快速连续进行 5 次调用。TChromium 更快,多线程,但似乎不倾向于等待。

这是目前困扰我的问题:

for I := 0 to Urls.Count-1 do begin
  FrmDBrowser.crmBrowser.Load('http://www.dragontavern.com' + Urls[I]);
  if I < Urls.Count-1 then begin
    Application.ProcessMessages;
    Sleep(FrmDBrowser.Config.CubeDelay);
  end;
end;

它通过回调启动:

CefStringVisitor := TCefFastStringVisitor.Create(InventoryListCallback);
crmBrowser.Browser.MainFrame.GetSource(CefStringVisitor);

基本上,我有一个带有需要调用的子链接的 TStringlist。但是,当我运行上面的代码时,其中包含例如 3 个链接。只有最后一个电话被处理。睡眠也几乎被忽略了。

这是 TWebBrowser 的代码:

for I := 0 to Urls.Count-1 do begin
  webbrowser1.Navigate('http://www.dragontavern.com' + Urls[I]);
  if I < Urls.Count-1 then begin
    Application.ProcessMessages;
    Sleep(FConfig.CubeDelay);
  end;
end;

如您所见,非常相似。除了它是由用户从主线程启动的。我想这将是一个容易回答的问题,但是,在回调过程中睡眠不会影响主线程,因此要让这个工作我需要同步或发布消息到主窗体?或者是否有一种更简单的方法让 TChromium 一个接一个地运行多个 url?

如果您想查看完整源代码并运行该项目,请随意浏览:https ://bitbucket.org/tstki/dragontavern-logger

(我知道 Application.ProcessMessages 是一个丑陋的东西)

4

0 回答 0