Delphi TEmbeddedWB仍在加载页面,无法停止

Delphi TEmbeddedWB仍在加载页面,无法停止,delphi,delphi-7,tembeddedwb,Delphi,Delphi 7,Tembeddedwb,我一直在这里搜索,但没有成功,也没有任何可接受的答案 我有一个更大的应用程序,它使用TEmbeddedWB。假设我的代码如下所示: // here is some other code where I am working with EmbeddedWB1 EmbeddedWB1.Navigate2('http://www.stackoverflow.com'); while EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE do beg

我一直在这里搜索,但没有成功,也没有任何可接受的答案

我有一个更大的应用程序,它使用TEmbeddedWB。假设我的代码如下所示:

// here is some other code where I am working with EmbeddedWB1

EmbeddedWB1.Navigate2('http://www.stackoverflow.com');

while EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE do
begin
  EmbeddedWB1.Stop;
  Application.ProcessMessages;
end;

EmbeddedWB1.Navigate2('http://www.google.com');
//下面是我正在使用EmbeddedWB1的一些其他代码
EmbeddedWB1.Navigate2('http://www.stackoverflow.com');
而EmbeddedWB1.ReadyState ReadyState_完成
开始
嵌入式WB1.停止;
Application.ProcessMessages;
结束;
EmbeddedWB1.Navigate2('http://www.google.com');
而这个代码被卡在了这个循环中

调试时,
EmbeddedWB1.ReadyState=ReadyState\u加载

有人能告诉我,如何最终停止加载页面,并转到下一个导航

非常感谢


PS:如果没有这个循环,它通常可以加载另一个页面,即google.com。但是我真的需要在加载另一个页面之前将它放入
READYSTATE\u COMPLETE

它没有退出循环,因为你特别告诉它在
READYSTATE
完成之前不要退出循环,然后调用
Stop
,这样它就永远无法到达
READYSTATE

按照逻辑:

  • 我标记为
    {1}
    的那一行写着“在ReadyState完成之前一直保持循环”
  • 我标记为
    {2}
    的那行写着“停止加载页面”,这意味着
    ReadyState
    可以永远
    ReadyState\u COMPLETE
//这行写着“保持循环直到我们到达READYSTATE_完成” 而EmbeddedWB1.ReadyState ReadyState_COMPLETE do{1} 开始 EmbeddedWB1.Stop;{2} Application.ProcessMessages; 结束; 您故意阻止循环退出

如果要实际停止加载页面并退出循环,请输入计数器或计时器,并向循环中添加一个条件,以允许您在满足条件时退出:

Counter := 1;
while (Counter < SomeValue) and (EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE) do
begin
  Inc(Counter);
  Application.ProcessMessages;
end;

if Counter >= SomeValue then
  EmbeddedWB1.Stop;   // Had to break the loop above before complete. 
                      // trying to load and move on.
计数器:=1;
而(计数器=SomeValue,则
EmbeddedWB1.Stop;//在完成之前必须中断上面的循环。
//尝试加载并继续。

请停止使用忙循环?有一个名为OnDocumentComplete的事件,使用该事件加载下一页…你不明白,它永远不会到达OnDocumentComplete,我想停止加载页,换句话说,我不想让READYSTATE\u加载。我理解你的逻辑,但这不是问题,只是TEmbeddedWB很奇怪在某种程度上,我重新编码了,现在它工作了。谢谢。
Counter := 1;
while (Counter < SomeValue) and (EmbeddedWB1.ReadyState <> READYSTATE_COMPLETE) do
begin
  Inc(Counter);
  Application.ProcessMessages;
end;

if Counter >= SomeValue then
  EmbeddedWB1.Stop;   // Had to break the loop above before complete. 
                      // trying to load and move on.