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