Einzelnen Beitrag anzeigen

MartinKumeran

Registriert seit: 19. Jul 2005
10 Beiträge
 
#1

TWebbrowser + Application.ProcessMessages = Probleme?

  Alt 10. Jun 2009, 10:07
Hallo,

sind irgendjemandem schon einmal Freeze-Probleme bei der Benutzung des TWebBrowsers sowie des Befehls Application.ProcessMessages untergekommen?
Konkret möchte ich innerhalb einer Prozedur darauf warten dass der TWebBrowser eine Website fertig geladen hat und benutze dafür folgende Wartefunktion:

Delphi-Quellcode:
procedure Wait(Secs: Cardinal);
var
  ActualTime, LastTime, WaitingTime: Cardinal;
begin
  if Secs = 0 then exit;
  WaitingTime := Secs*1000;
  LastTime := GetTickCount;

  While true do begin //Endlosschleife welche durch break beendet wird
    Application.ProcessMessages;
    sleep(1);
    ActualTime := GetTickCount;
    if LastTime > ActualTime then begin //GetTickCount wurde von Windows zurueckgesetzt
      LastTime := ActualTime;
      Continue;
    end;
    if ActualTime - LastTime >= WaitingTime then break;;
  end;
end;
Mein Programm prueft ob das Ready-Ereignis des TWebBrowsers ausgelöst worden ist und ruft ansonsten die obenstehende Funktion mit jeweils einer Sekunde Wartezeit auf.
Diese Kombination aus dem laufenden Laden einer URL innerhalb des WebBrowsers und dem Aufruf von Application.ProcessMessages führt jedoch manchmal zu einem kompletten Freeze der Anwendung. In einem solchen Fall läuft die Anwendung einwandfrei bis zum Erreichen des ProcessMessages-Befehl um diesen nie wieder zu verlassen.
Hat jemand schon einmal etwas ähnliches beobachtet oder gar eine Lösung gefunden?
Im Internet finden sich verschiedentliche Spuren ähnlicher Probleme, beispielsweise hier:
Zitat:
One last point: Be careful with the use of Application.ProcessMessages when you use WebBrowser. I've avoided it except where fetches are added, which waits if the resultProcessor is busy. I don't know if it's the way events are sent, but I found that setting a label and calling application.ProcessMessages could force the same event to happen again. This occurred more in the debugger, but if you get odd behavior, comment them out.
Gibt es eine Möglichkeit das was innerhalb von Application.ProcessMessages passiert zu debuggen? Oder noch besser: Gibt es einen alternativen Befehl in Delphi zu ProcessMessages welcher trotzdem dafür sorgt dass der TWebBrowser weiter arbeiten kann?

Viele Grüße und Danke im Voraus,

Martin Kumeran
  Mit Zitat antworten Zitat